我有以下PL/SQL代码:
DECLARE
CURSOR c1 IS
SELECT last_name, job_id
FROM employees
WHERE job_id LIKE '%CLERK%' AND manager_id > 120
ORDER BY last_name;
BEGIN
FOR item IN c1 LOOP
DBMS_OUTPUT.PUT_LINE
('Name = ' || item.last_name || ', Job = ' || item.job_id);
END LOOP;
END;
现在,假设我在名为varchar类型的varray中有列名。也就是说,测试(1)具有last_name,测试(2)具有JOB_ID。在这种情况下如何使用上述循环?item.test(i)不起作用。
让我们假设最简单的情况,其中您总是有两个列,并且数据类型始终相同。
DECLARE
cur SYS_REFCURSOR;
n VARCHAR2(100),
id NUMBER
CURSOR c1 IS
BEGIN
OPEN cur FOR
'SELECT '||test(1)||','||test(2)||
' FROM employees '||
' WHERE job_id LIKE :job AND manager_id > :m '||
' ORDER BY '||test(1) USING '%CLERK%', 120;
LOOP
FETCH cur INTO n, id;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE
('Name = ' || n || ', Job = ' || id);
END LOOP;
END;
如果在设计时间不知道列和数据类型的数量会更复杂,但是您没有告诉我们您的要求。