虽然我与@ 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