oracle 动态游标 传参的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 动态游标 传参的问题相关的知识,希望对你有一定的参考价值。
declare type cur_type is ref cursor;
cur cur_type;
rec scott.emp%rowtype;
str varchar2(500):='';
letter char:='A';
begin loop
str:='select ename from scott.emp where ename like "%'||letter||'%" ';
open cur for str;
dbms_output.put_line('包含字母'||letter||'的名字');
loop fetch cur into rec.ename;
exit when cur%notfound;
dbms_output.put_line(rec.ename);
end loop;
exit when letter='Z';
letter:=chr(ascii(letter)+1);
end loop;
end;
------------------------------------------------------------------------
错误报告:
ORA-00904: "%A%": 标识符无效
ORA-06512: 在 line 8
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
草 提的 问题 怎么删除。。。。。。。
苍老师下载 ...........
thunder://QUFmdHA6Ly8wNDIzOjA0MjNAZjAwNi5mZmR5LmNjOjY4Ny+/vMCt0KHX06O606LQ27WuyfpEVkTW0NfWLnJtdmJaWg==
STR:='SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE ''%'||LETTER||'%'''; 参考技术B letter char:='A';
改为
letter varchar2(2) :='A'; 参考技术C 游标可以带变量声明
cursor cur(letter varchar2) is
select ename from scott.emp where ename like ‘%’||letter||'%'
在 Oracle PLSQL 中使用游标的动态列名
【中文标题】在 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 动态游标 传参的问题的主要内容,如果未能解决你的问题,请参考以下文章