雖然我與@ MTO的做法一致,從你的循環方法的錯誤是因爲你試圖指FIRST
和LAST
在空表上,他們都評價爲null,在這一點上。你實際上要做的:
FOR i IN null .. null LOOP
它得到相同ORA-06502: PL/SQL: numeric or value error
你原來FOR
循環。
您尚未定義矩陣的任何尺寸應該是什麼。你需要在某個地方做到這一點,以便能夠「初始化」它,例如與固定值相匹配MTO的和您的類型聲明:
DECLARE
TYPE RecType IS RECORD
(
value1 NUMBER,
value2 NUMBER,
value3 NUMBER
);
TYPE TblType IS TABLE OF RecType INDEX BY PLS_INTEGER;
TYPE TblOfTblType IS TABLE OF TblType INDEX BY PLS_INTEGER;
matrix TblOfTblType;
BEGIN
FOR i IN 1 .. 3 LOOP
FOR j IN 1 .. 4 LOOP
matrix(i)(j) := null;
END LOOP;
END LOOP;
END;
/
PL/SQL procedure successfully completed.
要使用非空值填充你woudl需要你填寫,然後分配TOT他方陣位置單獨記錄變量:
FOR i IN 1 .. 3 LOOP
FOR j IN 1 .. 4 LOOP
rec.value1 := i;
rec.value2 := j;
rec.value3 := DBMS_RANDOM.VALUE;
matrix(i)(j) := rec;
END LOOP;
END LOOP;
或者如果你在其他地方獲得這些表單,你可以在沒有循環的情況下鎖定特定的矩陣元素。你可以把它打印出來以同樣的方式MTO表現太,或FIRST
和LAST
,它現在是有效的:
FOR i IN matrix.FIRST .. matrix.LAST LOOP
FOR j IN matrix(i).FIRST .. matrix(i).LAST LOOP
DBMS_OUTPUT.PUT('[' || matrix(i)(j).value1
|| ',' || matrix(i)(j).value2
|| ',' || matrix(i)(j).value3 || ']' || CHR(11));
END LOOP;
DBMS_OUTPUT.NEW_LINE;
END LOOP;
感謝您的回覆,可以請你幫我,我怎麼可以創建一個矩陣plsql,我的過程應該如何? – maryam