Hola...
Espero y me puedan ayudar...
Tengo la siguiente tabla
La cual tiene almacenados unos pocos registros, en eso no hay problema.
El problema es que debo crear un paquete que tenga un procedimiento para insertar registros dentro de la tabla, un procedimiento para modificar datos y una funcion para mostrar algun dato.
Entonces, tengo el siguiente codigo
Código SQL:
Ver originalCREATE OR REPLACE PACKAGE PACK_ART IS
PROCEDURE INSERTAR_ART (COD IN ARTICULOS.CODARTICULO%TYPE, NOM IN ARTICULOS.NOMARTICULO%TYPE, FEC IN ARTICULOS.FECHA%TYPE, RESULTADO OUT VARCHAR2);
FUNCTION MOSTRAR_ART (COD IN ARTICULOS.CODARTICULO%TYPE) RETURN VARCHAR2;
PROCEDURE MODIFICAR_ART (COD IN ARTICULOS.CODARTICULO%TYPE, NOM IN ARTICULOS.NOMARTICULO%TYPE, RESULTADO OUT VARCHAR2);
END;
CREATE OR REPLACE PACKAGE BODY PACK_ART IS
PROCEDURE INSERTAR_ART (COD IN ARTICULOS.CODARTICULO%TYPE, NOM IN ARTICULOS.NOMARTICULO%TYPE, FEC IN ARTICULOS.FECHA%TYPE, RESULTADO OUT VARCHAR2) IS
BEGIN
INSERT INTO ARTICULOS VALUES (COD, NOM, FEC);
RESULTADO := 'ARTICULO INSERTADO';
EXCEPTION
WHEN OTHERS THEN RESULTADO := 'ERROR AL INSERTAR ARICULO';
END; --PRECEDURE INSERTA_SAL
FUNCTION MOSTRAR_ART (COD IN ARTICULOS.CODARTICULO%TYPE) RETURN VARCHAR2 IS
V_COD VARCHAR2(60);
BEGIN
SELECT CODARTICULO||' '|| NOMARTICULO ||' '||FECHA INTO V_COD FROM ARTICULOS WHERE CODARTICULO = COD;
RETURN V_COD;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_cod := '** No encontrado el articulo '||to_char(COD) ;
RETURN v_cod ;
WHEN TOO_MANY_ROWS THEN
v_cod := '** Más de un registro con CODIGO '||to_char(COD)||'. Avise al Admin.' ;
RETURN v_cod ;
WHEN OTHERS THEN
v_cod := '** ERROR INESPERADO **' ;
RETURN v_cod ;
END;
PROCEDURE MODIFICAR_ART (COD IN ARTICULOS.CODARTICULO%TYPE, NOM IN ARTICULOS.NOMARTICULO%TYPE, RESULTADO OUT VARCHAR2) IS
V_COD VARCHAR2(60);
BEGIN
UPDATE ARTICULOS
SET NOMARTICULO = NOM
WHERE ARTICULOS.CODARTICULO = COD;
RESULTADO := 'ARTICULO MODIFICADO';
EXCEPTION
WHEN OTHERS THEN RESULTADO := 'ERROR AL INSERTAR ARTICULO';
END;
END;
DECLARE
RES VARCHAR2(80);
BEGIN
dbms_output.put_line(PACK_ART.MOSTRAR_ART(111));
dbms_output.put_line(PACK_ART.MODIFICAR_ART(111,'SILLA'));
PACK_ART.INSERTAR_ART(112,'PELOTA',TO_DATE('20100115','YYYYMMDD'));
dbms_output.put_line(RES);
END;
En el codigo anterior creo los procedimientos y la función, ademas que al final creo un subprograma que los invoque. La función, la de mostrar datos trabaja perfectamente, pero los procedimientos al momento de invocarlos me saca el error de que los argumentos en la invocación de los procedimientos no son validos...
Espero y alguien me pueda guiar para saber donde esta el error