Oracle - DESDE UNA FUNCION HACER LLAMADO A UN TRIGGER

 
Vista:

DESDE UNA FUNCION HACER LLAMADO A UN TRIGGER

Publicado por Blades (1 intervención) el 22/10/2009 18:15:26
Buenos dias queria hacer la consulta sobre un trigger... pasa que tengo un trigger que funciona correctamente... lo que ahora estoy haciendo es que parte de ese trigger lo estoy poniendo como funcion ya que luego lo voy a reutilizar para otros triggers..

Pero cuando ejecuto la funcion me sale un error que es este

PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR1' LINE:7 COLUMN: 16
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR1' LINE:8 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR1' LINE:9 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR1' LINE:10 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR1' LINE:11 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR1' LINE:12 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR1' LINE:15 COLUMN: 7

PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR2' LINE:18 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR2' LINE:19 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR2' LINE:20 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR2' LINE:21 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR2' LINE:22 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR2' LINE:23 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR2' LINE:26 COLUMN: 7


PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR3' LINE:29 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR3' LINE:30 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR3' LINE:31 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR3' LINE:32 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR3' LINE:33 COLUMN: 11
PLS-00049: bad bind variable'NEW.SCRIPT_VARCHAR3' LINE:34 COLUMN: 11


la funcion que quiero crear es este:


CREATE OR REPLACE FUNCTION GENESYS_OCS.fn_setea_campos(x varchar)
RETURN NUMBER
IS
result NUMBER;
BEGIN

IF ( LOWER (:NEW.script_varchar1) = 'no contesta'
OR :NEW.script_varchar1 = 'Seleccione Alternativa'
OR :NEW.script_varchar1 = 'Seleccionar Alternativa'
OR :NEW.script_varchar1 = 'Seleccione Dia'
OR :NEW.script_varchar1 = 'Seleccione Mes'
OR :NEW.script_varchar1 = 'Seleccione Ao'
)
THEN
:NEW.script_varchar1 := '';
END IF;

IF ( :NEW.script_varchar2 = 'No Contesta'
OR :NEW.script_varchar2 = 'Seleccione Alternativa'
OR :NEW.script_varchar2 = 'Seleccionar Alternativa'
OR :NEW.script_varchar2 = 'Seleccione Dia'
OR :NEW.script_varchar2 = 'Seleccione Mes'
OR :NEW.script_varchar2 = 'Seleccione Ao'
)
THEN
:NEW.script_varchar2 := '';
END IF;

IF ( :NEW.script_varchar3 = 'No Contesta'
OR :NEW.script_varchar3 = 'Seleccione Alternativa'
OR :NEW.script_varchar3 = 'Seleccionar Alternativa'
OR :NEW.script_varchar3 = 'Seleccione Dia'
OR :NEW.script_varchar3 = 'Seleccione Mes'
OR :NEW.script_varchar3 = 'Seleccione Ao'
)
THEN
:NEW.script_varchar3 := '';
END IF;
.
.
.
.
.

IF ( :NEW.script_varchar39 = 'No Contesta'
OR :NEW.script_varchar39 = 'Seleccione Alternativa'
OR :NEW.script_varchar39 = 'Seleccionar Alternativa'
OR :NEW.script_varchar39 = 'Seleccione Dia'
OR :NEW.script_varchar39 = 'Seleccione Mes'
OR :NEW.script_varchar39 = 'Seleccione Ao'
)
THEN
:NEW.script_varchar39 := '';
END IF;

--return(result);
--EXCEPTION WHEN NO_DATA_FOUND THEN
return 0;

END ;
/

y bueno arriba ya les detalle el error... no soy muy diestro en esto pero creo que el problema esta en el x varchar tal vez este incorrecto... he estado investigando y tal vez sea asi ....x IN varchar.... no lo se en realidad....

Por favor quisiera que m ayuden ya que siempre me han dado la mano ustedes

muy agradecidos por la ayuda


BLADES

Pdta: Por favor al momento de ecplicarme la solucion pdio que sean lo mas explicitos ya que recien estoy comenzandp en esto.. para entender si muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DESDE UNA FUNCION HACER LLAMADO A UN TRIGGER

Publicado por JORGE SANCHEZ (186 intervenciones) el 03/11/2009 22:17:38
Primero, se mas explicito.

Segundo.

Un TRIGGER es un EVENTO y es se ejecuta cuando en tu BASE de DATOS se identifia un INSERT,DELETE o UPDATE por lo que un TRIGGER NO PODRA SER UNA FUNCION como lo quieres hacer en tu codigo ... lo que si puedes hacer es DENTRO del TRIGGER una FUNCION...

CREATE OR REPLACE TRIGGER TRG_AUTOS
BEFORE DELETE OR UPDATE ON AUTOS
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
USU VARCHAR2(20);
HOY DATE ;
--
-- FUNCTION DEL TRIGGER
--
FUNCTION ...
...
BEGIN
RETURN ...
END;
BEGIN
USU := USER;
HOY := SYSDATE;
IF UPDATING THEN
INSERT INTO BITACORA_MOVIMIENTOS
VALUES( USU,
HOY,
:OLD.AUT_ID||';'||
:OLD.PLACAS||';'||
:OLD.MODELO||';'||
:OLD.CLR_ID||';'||
:NEW.PLACAS ,
'U' );
ELSIF DELETING THEN
INSERT INTO BITACORA_MOVIMIENTOS
VALUES( USU,
HOY,
:OLD.AUT_ID||';'||
:OLD.PLACAS||';'||
:OLD.MODELO||';'||
:OLD.CLR_ID,
'D' );
END IF;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar