我有3个表emp
,dept
和loc
,主键分别是eid
,deptid
和locid
。我的要求是使用Oracle PLSQL集合/记录一起显示eid
、deptid
和locid
。
DECLARE
TYPE COL_ID IS
TABLE OF NUMBER(7) INDEX BY BINARY_INTEGER;
X COL_ID;
Y COL_ID;
Z COL_ID;
BEGIN
SELECT
E.EMPNO,
D.DEPTNO,
L.LOCID
BULK COLLECT
INTO
X,
Y,
Z
FROM
EMP E,
DEPT D,
LOC L
WHERE
E.DEPTNO = D.DEPTNO
AND D.LOCID = L.LOCID;
FOR I IN X.FIRST..X.LAST LOOP
DBMS_OUTPUT.PUT_LINE(X(I));
END LOOP;
FOR J IN Y.FIRST..Y.LAST LOOP
DBMS_OUTPUT.PUT_LINE(Y(J));
END LOOP;
FOR K IN Z.FIRST..Z.LAST LOOP
DBMS_OUTPUT.PUT_LINE(Z(K));
END LOOP;
END;
/
我尝试这样做,它给我正确的输出,但显示输出是不按顺序,我知道这不是一个正确的方法来得到这个,因为有很多安静的性能问题。请大家帮我修改一下上面的程序。
2条答案
按热度按时间ercv8c1e1#
创建自己的类型。下面是一个基于Scott的示例模式的示例(因此表与数据模型略有不同,您必须调整此代码)。
样本数据:
程序:
zphenhs42#
但显示输出不按顺序
所有集合都将具有相同数量的元素;循环一次并输出每次循环迭代的值:
或者,使用记录作为列的组合:
ORDER BY
子句以指定序列的顺序。*其中,对于样本数据:
两个输出:
fiddle