From: | Victor Lopez <v(dot)lopez(dot)s(at)ono(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | (CREATE TEMP | 'DROP') TABLE en una (funcion | transaccion) ¿? |
Date: | 2007-03-25 04:32:11 |
Message-ID: | 200703250632.11528.v.lopez.s@ono.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Saludos.
La situacion es la siguiente ...
test=# -----------------------------------------------------------------------------------------------------------------------
test=# CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
AS '$libdir/plpgsql' LANGUAGE C;
CREATE FUNCTION
test=# CREATE FUNCTION plpgsql_validator(oid) RETURNS void
AS '$libdir/plpgsql' LANGUAGE C;
CREATE FUNCTION
test=# CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler
VALIDATOR plpgsql_validator;
NOTICE: usando información de pg_pltemplate en vez de los parámetros de
CREATE LANGUAGE
CREATE LANGUAGE
test=# CREATE DOMAIN domUsuario AS VARCHAR(16) NOT NULL CONSTRAINT usuarioChk
CHECK(VALUE ~ '^[a-zA-Z0-9]{8,}$');
CREATE DOMAIN
test=# CREATE OR REPLACE FUNCTION usuarioOK(VARCHAR(16)) RETURNS boolean AS
test-# $$
test$# BEGIN
test$# BEGIN
test$# CREATE TEMP TABLE TabUsuario (usuario domUsuario) ON COMMIT DROP;
test$# INSERT INTO TabUsuario(usuario) VALUES ($1);
test$# RETURN true;
test$# EXCEPTION
test$# WHEN check_violation THEN
test$# RETURN false;
test$# END;
test$# END;
test$# $$
test-# LANGUAGE plpgsql
test-# SECURITY DEFINER;
CREATE FUNCTION
test=# SELECT usuarioOK('gtfrthjuk');
usuariook
-----------
t
(1 fila)
test=# -- Hasta aqui, todo bien
test=# --
test=# SELECT usuarioOK('gtf');
ERROR: no existe la relación con OID 17123
CONTEXT: sentencia SQL: «INSERT INTO TabUsuario(usuario) VALUES ( $1 )»
PL/pgSQL function "usuariook" line 4 at SQL statement
test=# SELECT usuarioOK('gtfrthjuk');
ERROR: no existe la relación con OID 17123
CONTEXT: sentencia SQL: «INSERT INTO TabUsuario(usuario) VALUES ( $1 )»
PL/pgSQL function "usuariook" line 4 at SQL statement
test=# -----------------------------------------------------------------------------------------------------------------------
Al ser una tabla temporal, con ON COMMIT DROP no debería eliminarse al acabar
la transacción )
Porque ... una función es una transacción (por defecto) ... ¿no?
Al entrar en la función / transacción se crea siempre antes de hacer el
INSERT ... ¿no?
¿Entonces el OID de que es?
O yo hago algo mal (para no variar) o ...
¿Alguien me lo puede explicar?
NOTA : El ejemplo es real y no 'retocado'.
--
----o---( )---o----
Saludos de Victor Lopez Sabio
v(dot)lopez(dot)s(at)ono(dot)com
--------oooo--------
From | Date | Subject | |
---|---|---|---|
Next Message | Jaime Casanova | 2007-03-25 04:54:04 | Re: (CREATE TEMP | 'DROP') TABLE en una (funcion | transaccion) ¿? |
Previous Message | Daniel Ricardo Medina | 2007-03-25 03:01:40 | RE: Ayuda urgente |