SQL - Procedimiento LIstar_Productos

 
Vista:

Procedimiento LIstar_Productos

Publicado por Martin (1 intervención) el 01/10/2017 00:02:04
Bueno dias, necesito ayuda en un Trabajo Practico de Pl/Sql, tengo que realizar un procedimiento en un paquete para listar productos de una tabla en memoria.

esta es la consigna:

Un procedimiento público LISTA_PRODUCTO que recibe un código de producto o descripción de un producto o no recibe parámetros. Si recibe los datos de un producto lista sus datos de la tabla en memoria, si no recibe parámetros lista toda la tabla. Si el producto no existe cancelar con un mensaje de error.

Esto es lo que ya tengo:
Head:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
create or replace PACKAGE TPVENTAS
AS
    TYPE R_TYPE IS RECORD
    (pro_id product.product_id%type,
    pro_desc product.description%type,
    price_list price.list_price%type);
 
    TYPE TABLA_PRODUCT IS TABLE OF R_TYPE
    INDEX BY BINARY_INTEGER;
    TPRO TABLA_PRODUCT;
 
    PROCEDURE  LISTA_PRODUCTO(pp_desc in out PRODUCT.DESCRIPTION%TYPE,pp_id in out PRODUCT.product_id%TYPE);
 
END TPVENTAS;
 
Body:
 
create or replace PACKAGE BODY TPVENTAS AS
 
  PROCEDURE  LISTA_PRODUCTO
    (pp_desc in OUT PRODUCT.DESCRIPTION%TYPE, pp_id in OUT PRODUCT.product_id%TYPE)
  AS
  r_ee r_type;
  Begin
    for i in 1..tpro.count
    loop
        if pp_id is null and tpro(i).pro_desc = pp_desc then
        r_ee.pro_id := tpro(i).pro_id;
        r_ee.pro_desc := tpro(i).pro_desc;
        r_ee.price_list := tpro(i).price_list;
        DBMS_OUTPUT.PUT_LINE(r_ee.pro_id || ' ' || r_ee.pro_desc || ' ' || r_ee.price_list);
        return;
   elsif pp_desc is null and tpro(i).pro_id = pp_id then
        r_ee.pro_id := tpro(i).pro_id;
        r_ee.pro_desc := tpro(i).pro_desc;
        r_ee.price_list := tpro(i).price_list;
        DBMS_OUTPUT.PUT_LINE(r_ee.pro_id || ' ' || r_ee.pro_desc || ' ' || r_ee.price_list);
        return;
    else
        DBMS_OUTPUT.PUT_LINE(tpro(i).pro_id || ' ' || tpro(i).pro_desc || ' ' || tpro(i).price_list);
        return;
    end if;
    end loop;
  END LISTA_PRODUCTO;
 
END TPVENTAS;

la tabla en memoria ya esta cargada en 'tpro'

No se cual es mi error, si pudieran fijarse me harian un gran favor! Gracias! Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder