無論我在運行這個程式時給出什么引數,它總是說我的索引需要更低。例如,如果我給出引數 (1,1),它表示我的索引是 61,它應該在 1 到 60 的范圍內。
這兩個表都有兩列,第一個有 id_produs 和 id_departament,第二個有 id_produs 和 id_comanda。兩個表都在兩列中插入了單個數字,但沒有任何效果。你覺得有什么特別不對勁嗎?
CREATE OR REPLACE PROCEDURE procedura_6
(v_produse_2 produs_departament.id_produs%type, v_produse_5 comanda_produs.id_produs%type )
IS
TYPE varray_produse_2 IS VARRAY(60) OF produs_departament.id_produs%type;
TYPE nested_table_produse_5 IS TABLE OF comanda_produs.id_produs%type;
varray_numar_dept varray_produse_2:=varray_produse_2();
nested_table_numar_com nested_table_produse_5:=nested_table_produse_5();
BEGIN
SELECT id_produs BULK COLLECT INTO varray_numar_dept FROM produs_departament;
SELECT id_produs BULK COLLECT INTO nested_table_numar_com FROM comanda_produs;
for l_index in varray_numar_dept.FIRST..varray_numar_dept.LAST
LOOP
IF (v_produse_2>varray_numar_dept(l_index)) THEN
DBMS_OUTPUT.PUT_LINE(varray_numar_dept(l_index));
END IF;
END LOOP;
for l_index in nested_table_numar_com.FIRST..nested_table_numar_com.LAST
LOOP
IF v_produse_5>nested_table_numar_com(l_index) THEN
DBMS_OUTPUT.PUT_LINE(nested_table_numar_com(l_index));
END IF;
END LOOP;
END procedura_6;
/
execute procedura_6(2,2);
begin
procedura_6(3,3);
end;
/
uj5u.com熱心網友回復:
這是罪魁禍首:
TYPE varray_produse_2 IS VARRAY(60) OF produs_departament.id_produs%type;
--
this
顯然,從表中選擇回傳超過 60 行,而您只為它們保留了 60 個位置。它運行正常,直到達到限制。對于第 61 行,它失敗了。
放大它。
uj5u.com熱心網友回復:
表produs_departament有多少行?我懷疑它有超過 60 行,并且錯誤是由于嘗試將所有這些獲取到VARRAY(60).
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/406508.html
標籤:
上一篇:如何在oracle上分隔年份范圍
下一篇:列出SQL查詢中使用的表
