Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

ayuda pl

Estas en el tema de ayuda pl en el foro de Oracle en Foros del Web. create or replace procedure rrrep_solicita(fecha_v pedido.fecha%type) is cursor c1 is select num_ped from pedido where fecha >= fecha_v; cursor c2 is select cod_rep from det_pedido ...
  #1 (permalink)  
Antiguo 24/09/2009, 11:21
 
Fecha de Ingreso: septiembre-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
ayuda pl

create or replace procedure rrrep_solicita(fecha_v pedido.fecha%type)
is

cursor c1
is
select num_ped
from pedido
where fecha >= fecha_v;

cursor c2
is
select cod_rep
from det_pedido
where num_ped = n_ped;

suma number;
porc number;

n_ped pedido.num_ped%type;
a_autor rep_cuadro.autor%type;
a_cod rep_cuadro.cod_rep%type;
a_tit rep_cuadro.titulo%type;

begin

open c1;
loop
fetch c1 into n_ped;
exit when c1%notfound;
open c2;
loop
fetch c2 into a_cod;
exit when c2%notfound;
porc := pprom_cant(a_cod);

if porc <> 0 then
select sum(cant_ped) into suma
from det_pedido where cod_rep = a_cod;

if (porc * 2) >= suma and suma > 20 then
select titulo, autor into a_tit, a_autor from rep_cuadro where cod_rep = a_cod;

update existencia set cant_min = round(cant_min * 1.8) where cod_rep = a_cod;
dbms_output.put_line('codigo: ' || a_cod ||' titulo: ' || a_tit ||'autor: ' || a_autor || 'cantidad: ' || suma );

end if;
end if;
end loop;
end loop;
close c1;
close c2;
end;
/


me manda este error:

10/1 PL/SQL: SQL Statement ignored
10/8 PLS-00320: la declaración del tipo de expresión es incompleta o
con forma inadecuada

12/17 PLS-00320: la declaración del tipo de expresión es incompleta o
con forma inadecuada

27/3 PL/SQL: SQL Statement ignored


supongo q es por el cursor, pero porque?
si alguin me puede ayudar.
  #2 (permalink)  
Antiguo 24/09/2009, 12:39
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 11 meses
Puntos: 4
Respuesta: ayuda pl

Cita:
Iniciado por albokiller Ver Mensaje
create or replace procedure rrrep_solicita(fecha_v pedido.fecha%type)
is

cursor c1
is
select num_ped
from pedido
where fecha >= fecha_v;

cursor c2
is
select cod_rep
from det_pedido
where num_ped = n_ped;
Hola...

no sera porque en vez de ser pedido.fecha%type deberia ser pedido.fecha%ROWTYPE

Creo que ese debe ser el error que te marca en el cursor 1

Scooby
  #3 (permalink)  
Antiguo 24/09/2009, 12:51
 
Fecha de Ingreso: septiembre-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: ayuda pl

Cita:
Iniciado por scooby151 Ver Mensaje
Hola...

no sera porque en vez de ser pedido.fecha%type deberia ser pedido.fecha%ROWTYPE

Creo que ese debe ser el error que te marca en el cursor 1

Scooby
pero el error es en el segundo cursor
  #4 (permalink)  
Antiguo 24/09/2009, 13:06
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 11 meses
Puntos: 4
Respuesta: ayuda pl

Cita:
Iniciado por albokiller Ver Mensaje
pero el error es en el segundo cursor
Si te fijas bien el dice que

Cita:
10/1 PL/SQL: SQL Statement ignored
10/8 PLS-00320: la declaración del tipo de expresión es incompleta o
con forma inadecuada
con esto te dice que en la linea 10 ahi un problema, si examinamos esa linea es donde declaras el cursor2, entonces analiza la linea anterior y veras que aparece la variable que estas pasando por parametro, ajustalo asi como lo indique y ejecutalo nuevamente. Probablemente solucionando el problema del cursor 1 se arregle el 2 cursor.

Scooby
  #5 (permalink)  
Antiguo 24/09/2009, 13:13
 
Fecha de Ingreso: septiembre-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: ayuda pl

Cita:
Iniciado por scooby151 Ver Mensaje
Si te fijas bien el dice que



con esto te dice que en la linea 10 ahi un problema, si examinamos esa linea es donde declaras el cursor2, entonces analiza la linea anterior y veras que aparece la variable que estas pasando por parametro, ajustalo asi como lo indique y ejecutalo nuevamente. Probablemente solucionando el problema del cursor 1 se arregle el 2 cursor.

Scooby
me manda esto:


PL/SQL: Compilation unit analysis terminated
PLS-00310: con el atributo %ROWTYPE, 'PEDIDO.FECHA' debe
especificar una tabla, un cursor o una variable de cursor
  #6 (permalink)  
Antiguo 24/09/2009, 13:58
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 11 meses
Puntos: 4
Respuesta: ayuda pl

Ahi te envio un ejemplo de como tengo yo un procedimiento

Código:
create or replace procedure Tiempo(p_fecha IN DATE) as

  v_fec date := to_date(p_fecha,'DD/MM/YYYY');
 ...
cambia tu codigo que quede mas o menos asi:

Código:
create or replace procedure rrrep_solicita(fecha_v IN pedido.fecha%rowtype) as

var_fecha date := to_date(fecha_v,'DD/MM/YYYY');

cursor c1 is 
select num_ped
from pedido
where fecha >= var_fecha;
o si prefieres modifica el encabezado del procedimiento y entra a compararlo directamente.

Código:
create or replace procedure rrrep_solicita(fecha_v IN pedido.fecha%rowtype)as

cursor c1 is 
select num_ped
from pedido
where fecha >= fecha_v;
Scooby
  #7 (permalink)  
Antiguo 25/09/2009, 02:54
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Respuesta: ayuda pl

Eso está mal.
Si pedido es la tabla y fecha un campo la declaracion correcta es así :
create or replace procedure rrrep_solicita(fecha_v IN pedido.fecha%type)as

Las declaraciones del tipo tabla%rowtype son para variables tipo de registro de tabla.

¿ Que es n_ped del cursor c2 ?

¿ no deberias cerrar primero el c2 y luego el c1 ?
  #8 (permalink)  
Antiguo 29/09/2009, 09:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: ayuda pl

ya lo solucione, simplemente cacmbie los dos cursores por uno con join que me simplificaba todo.
y el error era pk referenciaba a un dato en una variable que todavia no estaba.
gracias a lso q resp0ondieron
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:25.