Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

trigers :(

Estas en el tema de trigers :( en el foro de PostgreSQL en Foros del Web. aclaro que soy nuevo en esta bd quiero hacer un simple triger pero no logro sacar el error que me tira: INSERT INT table1( id_codigo) ...
  #1 (permalink)  
Antiguo 04/09/2009, 13:43
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 20 años, 2 meses
Puntos: 1
trigers :(

aclaro que soy nuevo en esta bd

quiero hacer un simple triger pero no logro sacar el error que me tira:

INSERT INT table1(
id_codigo)
VALUES (1)

function:

CREATE or replace function test() RETURNS trigger AS '
DECLARE
v_suc_codigo varchar;
BEGIN
v_suc_codigo := "valor_char";
insert into table2 (a) values (v_suc_codigo);
return null;
END
' LANGUAGE plpgsql VOLATILE


triger:
------------------------


CREATE TRIGGER tri1 AFTER INSERT OR DELETE OR UPDATE ON table1
FOR EACH ROW EXECUTE PROCEDURE test();

y cuando hago el insert para que se ejecute el triger:

INSERT INTO table1(
id_codigo)
VALUES (1);

me devuelve este error:


ERROR: column "valor_char" does not exist
LINE 1: SELECT "valor_char"
^
QUERY: SELECT "valor_char"
CONTEXT: PL/pgSQL function "test" line 4 at assignment

********** Error **********

ERROR: column "valor_char" does not exist
SQL state: 42703
Context: PL/pgSQL function "test" line 4 at assignment

pero si a la variable v_suc_codigo le pongo un valor numerico me inserta bien , el problema es cuando es un valor de caracter. me tira siempre ese error. el tipo de dato de la tabla es text tb , no es problema de tipo de dato .
agradecere cualquier ayuda.
muchas gracias
__________________
Mas vale morir de pie que vivir de rodillas :ojotes:
  #2 (permalink)  
Antiguo 04/09/2009, 15:33
Avatar de pgsqlesorg  
Fecha de Ingreso: septiembre-2009
Ubicación: Noruega
Mensajes: 10
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: trigers :(

Cita:
Iniciado por popopo Ver Mensaje
v_suc_codigo varchar;
v_suc_codigo := "valor_char";
Estos son los dos fallos que tienes.

varchar se tiene que definir con el numero de caracteres que puedes aceptar y los valores alfanumericos se definen entre comillas simples y no dobles.

Código:
v_suc_codigo  varchar(15);
v_suc_codigo := 'valor_char';
Tambien podrias utilizar el tipo text

Código:
v_suc_codigo  text;
--
Rafael Martinez
PostgreSQL-es.org
  #3 (permalink)  
Antiguo 05/09/2009, 10:17
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: trigers :(

lo de ponerle la cantidad de posiciones al varchar realmente no genera un error de sintaxis, pero si es recomendado hacerlo.

te recomiendo hacer uso de otro juego de caracteres diferente a la comilla simple para empezar y terminar la ejecución de un trigger. Esto se puede hacer, pero debes saber cuando se abre o cierra una comilla cuando la requieras dentro del codigo como es el caso.

prueba esto y dinos si solucionas el problema.

Código sql:
Ver original
  1. CREATE OR REPLACE FUNCTION test() RETURNS TRIGGER AS
  2. $$
  3. DECLARE
  4. v_suc_codigo VARCHAR;
  5. BEGIN
  6. v_suc_codigo := 'valor_char';
  7. INSERT INTO table2 (a) VALUES (v_suc_codigo);
  8. RETURN NULL;
  9. END
  10. $$ LANGUAGE plpgsql VOLATILE
  11.  
  12. CREATE TRIGGER tri1 AFTER INSERT OR DELETE OR UPDATE ON table1
  13. FOR EACH ROW EXECUTE PROCEDURE test();

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:46.