Stored Procedures

Mariano
23 de Enero del 2006
Hola. Tengo el siguiente inconveniente. Tengo un SP que me indica que hay un error de paso de par�metros cuando lo ejecuto. Sin embargo, no logro distinguir este error. Podr�an darme una mano?

Este es el c�digo del SP:

REATE OR REPLACE PROCEDURE "LU_INSERTARPAIS" (
nbrePais IN VARCHAR2,
Nacionalidad IN VARCHAR2,
RC1 OUT Omwb_emulation.globalPkg.RCT1
)
AS
nbrePais_ VARCHAR2(60) := nbrePais;
Nacionalidad_ VARCHAR2(60) := Nacionalidad;
StoO_selcnt INTEGER;
StoO_error INTEGER;
StoO_rowcnt INTEGER;
StoO_crowcnt INTEGER := 0;
StoO_fetchstatus INTEGER := 0;
StoO_errmsg VARCHAR2(255);
StoO_sqlstatus INTEGER;
idUltimo NUMBER(10,0);
BEGIN

SELECT ( MAX(tab_pais_id) + 1 )
INTO idUltimo
FROM TAB_PAIS;

IF LU_INSERTARPAIS.idUltimo is NULL THEN LU_INSERTARPAIS.idUltimo := 1;
END IF;
BEGIN
StoO_error := 0;
StoO_rowcnt := 0;
INSERT INTO omwb_login1.TAB_PAIS (tab_pais_id, tab_pais_desc, tab_pais_nacion)
VALUES (LU_INSERTARPAIS.idUltimo,LU_INSERTARPAIS.nbrePais_,LU_INSERTARPAIS.Nacionalidad_);
StoO_rowcnt := SQL%ROWCOUNT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
StoO_error := SQLCODE;
StoO_errmsg := SQLERRM;
raise_application_error(SQLCODE, SQLERRM,true);
END;
OPEN RC1 FOR

SELECT *
FROM TAB_PAIS
WHERE tab_pais_id = LU_INSERTARPAIS.idUltimo;
END;
/


La sentencia que ejecuto es:
call LU_INSERTARPAIS(\'AUSTRALIA\',\'AUSTRALIANA\');

Cualquier duda me preguntan. Y gracias por la ayuda.
Saludos.

eddie_
23 de Enero del 2006
Submite un SHOW ERRORS y publicalo, gracias...

tony
23 de Enero del 2006
Para probarlo y poder rellenar la ultima variable, puedes definir un cuerpo PL/SQL en el que hagas la llamada. Por ejemplo:

DECLARE

salida Omwb_emulation.globalPkg.RCT1;

Begin
LU_INSERTARPAIS(\'AUSTRALIA\',\'AUSTRALIANA\', salida);
DBMS_OUTPUT.PUT_LINE(salida);
END;
/
Antes de esto debes ejecutar

set dbmsoutput on

para que se impriman resultados por la consola de SQLPLUS.

SAludos

Jos?ntonio
23 de Enero del 2006
Hola,

En la llamada al procedimiento debería poner un tercer parámetro, que has definido como de salida. Sino pones NULL.

call LU_INSERTARPAIS(\\'AUSTRALIA\\',\\'AUSTRALIANA\\',null);

Saluods


Mariano
23 de Enero del 2006
Gracias por su colaboración. El error que me tira es el siguiente: "ORA-06553: PLS-306: número o tipos de argumentos erróneos al llamar a 'LU_INSERT".
Cuando le agrego null como tercer argumento también me da error: "ORA-06553: PLS-567: no se puede transferir un parámetro formal restringido NULL ".
Que mas puede ser?
Gracias.