在 Oracle PLSQL 中使用游标的动态列名

Posted

技术标签:

【中文标题】在 Oracle PLSQL 中使用游标的动态列名【英文标题】:Dynamic column name using cursor in Oracle PLSQL 【发布时间】:2014-03-06 12:49:15 【问题描述】:

我需要在循环中动态生成列名并使用 PLSQL 访问 oracle 表中的列。我该怎么做?

DECLARE
 varValue VARCHAR(20);
 CURSOR c IS
  SELECT * FROM TEST1;
 BEGIN
     FOR i IN c LOOP
       FOR j IN 1..5
       LOOP
        EXECUTE IMMEDIATE 'SELECT ''NAME1'||to_Char(j)||''' from dual' INTO varValue;
         dbms_output.put_line(j);
         dbms_output.put_line(i.varValue);
       END LOOP;
     END LOOP;
 END;

实际问题是,我需要访问由光标 (c) 给出的每一行 (i) 的单元格值,例如 i.name11、i.name12 ....i.name1100。要在每个单元中部署的逻辑是相同的。所以我需要这里使用的列名,即动态生成的 name11。这已经完成并存储到变量 varValue 中。现在我如何访问单元格 i.varValue 以便在循环中生成 var 值。

错误如下:

ORA-06550: line 14, column 34:
PLS-00302: component 'VARVALUE' must be declared
ORA-06550: line 14, column 11:
PL/SQL: Statement ignored

【问题讨论】:

是否可以使用已知名称为列命名?这样您就可以随时使用它来检索值。 我不明白你的担忧。发布您的全部要求,因为您的提问方式很难回答您的问题。 【参考方案1】:
DECLARE
 varValue VARCHAR(20);
 CURSOR c IS
  SELECT * FROM TEST1;
 BEGIN
     FOR i IN c LOOP
       FOR j IN 1..5
       LOOP
        EXECUTE IMMEDIATE 'SELECT ''NAME1'||to_Char(j)||''' from dual' INTO varValue;
         dbms_output.put_line(j);
         dbms_output.put_line('NAME1'||to_Char(j)||' : '||varValue);
       END LOOP;
     END LOOP;
 END;

【讨论】:

感谢 OracleUser,我们仍然可以说这在语法上是正确的...... :(。指定完整要求

以上是关于在 Oracle PLSQL 中使用游标的动态列名的主要内容,如果未能解决你的问题,请参考以下文章

『ORACLE』 PLSQL动态游标的使用(11g)

如何实现Oracle数据库中的动态游标

动态更改oracle游标中的列

oracle动态查询通过sql获取游标变量

PLSQL - 游标不能在动态 sql 中使用

『ORACLE』 PLSQL游标的使用(11g)