Plsql 从动态PL/SQL查询返回表结果
尝试动态生成和执行PL/SQL语句。它不返回结果,但执行正常。我尝试的是从第一个语句中的模式中获取表名(正确!),并将其附加到select语句中,然后执行它以返回表结果Plsql 从动态PL/SQL查询返回表结果,plsql,Plsql,尝试动态生成和执行PL/SQL语句。它不返回结果,但执行正常。我尝试的是从第一个语句中的模式中获取表名(正确!),并将其附加到select语句中,然后执行它以返回表结果 DECLARE LATEST_TABLE VARCHAR2(256); PostalCode ADM.POSTAL_CODE_201801%ROWTYPE; BEGIN SELECT TO_CHAR(max(table_name)) INTO LATEST_TABLE FROM all_tables WHERE own
DECLARE
LATEST_TABLE VARCHAR2(256);
PostalCode ADM.POSTAL_CODE_201801%ROWTYPE;
BEGIN
SELECT TO_CHAR(max(table_name)) INTO LATEST_TABLE FROM all_tables WHERE owner = 'ADM' AND table_name LIKE 'POSTAL_CODE_%';
LATEST_TABLE := 'begin Select POSTALCODE,LONGITUDE,LATITUDE,MUNICIPALITY_FULL_NAME,LOCAL_NAME,SZONE_NAME,ZONE_NAME,RHA_CODE,RHA_NAME,URBAN,ZONE_RURAL from ADM.'||LATEST_TABLE||' ;end;';
execute immediate LATEST_TABLE into PostalCode;
Exception
When others then
Null;
END;
为什么我没有得到任何结果?添加
dbms_输出.put_行(PostalCode.LONGITUDE | | PostalCode.LATITUDE)代码>之后立即执行
也不会生成结果 我在这里看到了几个问题;您的代码类似于:
declare
vSQL varchar2(1000);
vTabName varchar2(30);
vResult number;
begin
select table_name into vTabName from user_tables;
vSQL := 'begin select a from ' || vTabName || '; end;';
execute immediate vSQL into vResult;
dbms_output.put_line('REsult: ' || vResult);
exception
when others then
null
end;
如果你运行这个,你什么也看不到,因为动态部分给出了错误,但是(危险的)异常处理隐藏了它;如果要编辑null将>编码为类似
dbms_output.put_行('Error:'| | sqlerrm)代码>
你会得到:
Error: ORA-06550: line 1, column 7:
PLS-00428: an INTO clause is expected in this SELECT statement
实际上,动态代码就像
begin select a from someTable; end;
这就产生了错误。
做你需要的事情的一种方法可以是:
...
vSQL := 'select a from ' || vTabName;
execute immediate vSQL into vResult;
...
删除异常隐藏的可能重复项,以查看失败的内容。