……至少我认为那是问题所在.
我正在编写一个函数,其中包含一个访问表的游标声明,其中一列是保留字NUMBER(是的,我知道..).该函数在编译时遇到问题:
错误(16,10):PL / sql:ORA-06552:PL / sql:编译单元分析终止ORA-06553:PLS-488:无效变量声明:对象’NUMBER’必须是类型或子类型
我的代码看起来像:
CURSOR my_cur IS SELECT "NUMBER",col2,col3 FROM tb1_x;
为了确保这是问题,我将代码更改为
CURSOR my_cur IS SELECT 'NUMBER','col2','col3' FROM dual;
它汇编得很好,但显然这不是我想要的.
不幸的是,我没有选择更改列名(叹气)和记录
SELECT "NUMBER",col3 FROM tb1_x;
在正常的sql执行中正常工作.
无论如何,我可以解决这个问题?任何帮助深表感谢!
解决方法
我们也可以在游标中创建记录以及使用列.从游标中获取数据我对我感到惊讶,因为我之前使用过它.
Create table temp2("number" integer,id integer,name varchar2(200)); insert into temp2 values(1,1,'Gaurav Soni'); insert into temp2 values(2,2,'Niharika Saraf'); Commit; DECLARE type abc is record( "number" number,id NUMBER,name varchar2(200)); v_rec abc; TYPE v_cur IS REF CURSOR; cur v_cur; v_temp INTEGER; BEGIN OPEN cur FOR SELECT "number",id,name FROM temp2; LOOP FETCH cur INTO v_rec; EXIT when cur%notfound; DBMS_OUTPUT.put_line('number is ' || v_rec."number"); DBMS_OUTPUT.put_line('id is ' || v_rec.id); DBMS_OUTPUT.put_line('name is ' || v_rec.name); end loop; CLOSE cur; end;
产量
number is 1 id is 1 name is Gaurav Soni number is 2 id is 2 name is Niharika Saraf