如何使用PLSQL光标存储在数组中的列名



我有以下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;

如果在设计时间不知道列和数据类型的数量会更复杂,但是您没有告诉我们您的要求。

最新更新