Espero y me puedan ayudar...
Tengo la siguiente tabla
Código MySQL:
Ver original
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 original
CREATE 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