2014-03-06 97 views
0

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

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; 

实际的问题是,我需要acccess由光标(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 
+0

是否有可能有一个响亮的名字别名列?这样你总是可以使用它来检索值。 –

+0

我不明白你的关注。发布你的全部要求,因为在你问的方式很难回答你的问题。 –

回答

0
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; 
+0

感谢OracleUser,我们仍然可以说这是句法上正确的...... :(指定完整的需求 – Maddy