problema con procedure

antonio
11 de Abril del 2005
Tengo este sp pero no me deja ejecutarlo, si alguien sabe por favor comuniqueme que puede ser.
CREATE OR REPLACE PROCEDURE modif_chain_n_bco (
cam IN VARCHAR2,
cam_out OUT VARCHAR2
)
AS
cam VARCHAR2;
BEGIN
tmpvar := cam;

IF tmpvar <> ''
UPDATE tmpvar SET CHAIN_N ='8' where CHAIN_N = '1';
COMMIT;
UPDATE @tmpvar SET CHAIN_N ='9' where CHAIN_N = '2';
COMMIT;
UPDATE tmpvar SET CHAIN_N ='2' where CHAIN_N = '8';
COMMIT;
UPDATE tmpvar SET CHAIN_N ='1' where CHAIN_N = '9';
COMMIT;
cam_out:= 'o';
ELSE
cam_out:= 'e';
END IF

END modif_chain_n_bco;
/

jc3000
11 de Abril del 2005
1-) Tienes una variable de entrada que se llama cam y luego te declaras otra VARCHAR2 ¿ DE CUANTO ? que se llama igual ( cam ). Eso no cuela.

2-) ¿ que es eso de UPDATE @tmpvar ? Eso creo que tampoco cuela.

3-) Si tmpvar es una variable ¿ donde te la declaras ?

4-) Si es una variable, aparte de declarartela, para ese tipo de sentencias debes utilizar sql dinamico


antonio
11 de Abril del 2005
segun lo comentado lo deje asi , pero me arroja el siguiente error: identifier 'TMPVAR' must be declared


CREATE OR REPLACE PROCEDURE bco_chain_n (cam IN VARCHAR2, cam_out OUT VARCHAR2)
AS
BEGIN
DECLARE
--cam VARCHAR2 (20);
tmpvar VARCHAR2 (20);
BEGIN
tmpvar := cam;

IF (tmpvar <> '')
THEN
UPDATE tmpvar
SET chain_n = '8'
WHERE chain_n = '1';

COMMIT;

UPDATE tmpvar
SET chain_n = '9'
WHERE chain_n = '2';

COMMIT;

UPDATE tmpvar
SET chain_n = '2'
WHERE chain_n = '8';

COMMIT;

UPDATE tmpvar
SET chain_n = '1'
WHERE chain_n = '9';

COMMIT;
cam_out := 'o';
ELSE
cam_out := 'e';
END IF;
END;
END bco_chain_n;

jc3000
11 de Abril del 2005
Te lo he dicho antes.
Asumo que tmpvar es una variable donde le metes el nombre de una tabla ¿no?
PUES NO SE PUEDE HACER ESO.
Tienes que usar el EXECUTE INMEDIATE o sql dinamico