Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/06/2012, 06:21
qwerty1935
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 11 años, 10 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