使用Oracle(使用12c企业版12.1.0.2.0版)时,我们可以编写类似...
SQL> select * from dual ;
DUMMY
X
但是,不能像以前那样在FROM子句中使用'a'作为表-例如
SQL> select * from 'a' ;
Error starting at line : 1 in command -
select * from 'a'
Error at Command Line : 1 Column : 15
Error report -
SQL Error: ORA-00903: invalid table name
00903. 00000 - "invalid table name"
*Cause:
*Action:
在对CURSOR FOR LOOP(PL / SQL)进行编码时,我发现编译了以下功能代码:
create or replace function f (
a varchar2
) return varchar2
is
begin
for r in ( select * from a ) -- parameter (type varchar2) as table name!
loop
dbms_output.put_line( ' a -> ' || a ) ;
end loop;
return a ;
end f ;
/
Function F compiled
测试
set serveroutput on
SQL> select f( 'z' ) from dual ;
F('Z')
z
a -> z
a -> z
问题
{1}如何在循环的PL / SQL游标中的SELECT语句的FROM子句中使用参数名称(代表单个varchar2)?
{2}(在示例中)为什么DBMS_OUTPUT.PUT_LINE()显然执行了两次?
答案 0 :(得分:3)
如果您选择这一行
for r in ( select * from a ) -- parameter (type varchar2) as table name!
然后Oracle不会从varchar2变量a
中进行选择-它从表a
中进行选择,巧合的是,该表与您的变量具有相同的名称。