14/06/2012, 06:21
|
| | Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 12 años, 5 meses Puntos: 0 | |
Respuesta: Me he quedado bloqueado No buscaba la solución, pero bueno
set serveroutput on;
CREATE OR REPLACE
PROCEDURE nuevopedido(codcliente in CABPED.COD_CLI%TYPE,
fechped in CABPED.FECHA_PED%TYPE DEFAULT sysdate,
codvendedor in CABPED.COD_VENDE%TYPE,
fechenvio in CABPED.FECHA_ENVI%TYPE,
total in CABPED.IMP_TOTAL%TYPE DEFAULT 0,
paga in CABPED.PAGADO%TYPE DEFAULT 'NO',
envio in CABPED.MODO_ENVIO%TYPE DEFAULT 'RENFE')
AS
numeropedido CABPED.NUM_PEDIDO%TYPE default(0);
numfechaenvio cabped.fecha_envi%type;
VACIO1 EXCEPTION;
VACIO2 EXCEPTION;
ERRORFECH EXCEPTION;
ERRORIMPORT EXCEPTION;
ERRORpaga EXCEPTION;
BEGIN
SELECT MAX(NUM_PEDIDO) INTO numeropedido FROM CABPED;
numeropedido:= numeropedido + 1;
If codcliente is NULL then
raise vacio1;
end if;
if fechenvio is NULL then
numfechaenvio:= (fechped + 7);
else
numfechaenvio:= fechenvio;
end if;
if codvendedor is NULL then
raise vacio2;
end if;
If fechped < fechenvio THEN
raise ERRORFECH;
end if;
if total < 0 then
raise ERRORIMPORT;
END IF;
IF paga != 'SI' or paga != 'NO'then
raise ERRORpaga;
END IF;
Insert into CABPED Values(numeropedido,codcliente,fechped,codvendedor ,numfechaenvio,total,
paga,envio);
UPDATE infemple SET VENTAS_ACU = VENTAS_ACU + total
WHERE Num_emple = codvendedor;
UPDATE sucursal SET VENTAS_ACU = VENTAS_ACU + total
WHERE num_suc in (select infemple.sucursal from infemple where num_emple = codvendedor);
EXCEPTION
WHEN VACIO1 THEN
dbms_output.put_line('Falta el codigo cliente');
WHEN VACIO2 THEN
dbms_output.put_line('Falta el codigo vendedor');
WHEN ERRORFECH THEN
dbms_output.put_line('La fecha de envio no puede ser anterior a la de pedido');
WHEN ERRORIMPORT THEN
dbms_output.put_line('El importe no puede ser negativo');
WHEN ERRORpaga THEN
dbms_output.put_line('PAGADO SOLO PUEDE SER REGISTRAR DATOS SI O NO');
WHEN DUP_VAL_ON_INDEX THEN
dbms_output.put_line('Clave existente');
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Faltan registros');
WHEN OTHERS THEN
dbms_output.put_line('Error al introducir el registro en la base de datos');
end;
Ya he arreglado el asunto, el problema es que me peta cuando llamo al proceso.
ejemplo:
execute nuevopedido(2101,15/06/12, 105,16/06/12, 500, 'SI', 'RENFE')
EGIN nuevopedido(2101,15/06/12, 105,16/06/12, 500, 'SI', 'RENFE'); END;
*
ERROR en línea 1:
ORA-06550: línea 1, columna 7:
PLS-00306: número o tipos de argumentos erróneos al llamar a 'NUEVOPEDIDO'
ORA-06550: línea 1, columna 7:
PLS-00306: número o tipos de argumentos erróneos al llamar a 'NUEVOPEDIDO'
ORA-06550: línea 1, columna 7:
PL/SQL: Statement ignored
He estado mirando lo de la columna 7, pero me parece correcto |