【发布时间】:2023-01-08 02:54:57
【问题描述】:
我正在尝试为我的学校项目声明一个必须包含至少 2 个不同游标的过程。我的程序应该得到订单(Comanda)中的所有产品(Produs),它们的价格(Pret)至少是我给函数的 v_pret 参数,但我收到以下错误:
Errors: PROCEDURE EXERCITIUL7 Line/Col: 0/0 PL/SQL: Compilation unit analysis terminated Line/Col: 8/43 PLS-00320: the declaration of the type of this expression is incomplete or malformed
这是我在此过程中使用的表的数据库模式:
这是我的程序代码:
`CREATE OR REPLACE PROCEDURE exercitiul7
(v_pret Produs.Pret%TYPE)
AS
TYPE randComanda IS RECORD(v_ID_Comanda Comanda.ID_Comanda%TYPE);
ID_Comenzi randComanda;
TYPE randProdus IS RECORD(v_ID_Produs ProduseComanda.ID_Produs%TYPE);
ID_Produse randProdus;
CURSOR comenzi(pretCursor NUMBER) IS
SELECT ID_Comanda FROM Comanda
WHERE pretCursor >= pret;
CURSOR produsecomanda(v_ID_Comanda ProduseComanda.ID_Comanda%TYPE) IS
SELECT ID_Produs FROM ProduseComanda
WHERE v_ID_Comanda = ID_Comanda;
CURSOR produse IS SELECT * FROM Produs;
BEGIN
OPEN comenzi(v_pret);
LOOP
FETCH comenzi INTO ID_Comenzi;
EXIT WHEN comenzi%NOTFOUND;
OPEN produsecomanda(ID_Comenzi.ID_Comanda);
LOOP
FETCH produsecomanda INTO ID_Produse;
EXIT WHEN produsecomanda%NOTFOUND;
FOR produs IN produse LOOP
IF produs.ID_Produs = ID_Produse.ID_Produs THEN
DBMS_OUTPUT.PUT_LINE(produs.nume);
END IF;
END LOOP;
END LOOP;
END LOOP;
END exercitiul7;
`
我怎么解决这个问题?我不知道该怎么办
【问题讨论】:
-
“ID_Comanda”或“ID_Comanda#”:检查名称是否正确,模式和 PL/SQL 代码之间存在矛盾。
-
请提供
create table语句来重现问题。另请注意,这种情况不需要显式游标,您可以使用这些表的普通join并处理此语句的结果