Oracle显示动态sql的结果集
我是甲骨文的新手,我已经花了两天的时间寻找解决我问题的方法 我有一个视图,它应该有一个动态列和表名。 诸如此类:Oracle显示动态sql的结果集,oracle,plsql,Oracle,Plsql,我是甲骨文的新手,我已经花了两天的时间寻找解决我问题的方法 我有一个视图,它应该有一个动态列和表名。 诸如此类: DECLARE plsql_block VARCHAR2(500); BEGIN plsql_block := 'SELECT CONCAT('some','column') FROM CONCAT('some','table')'; EXECUTE IMMEDIATE plsql_block END; 这会起作用,但如何显示结果?我已经用DBMS.Output和一个
DECLARE
plsql_block VARCHAR2(500);
BEGIN
plsql_block := 'SELECT CONCAT('some','column') FROM CONCAT('some','table')';
EXECUTE IMMEDIATE plsql_block
END;
这会起作用,但如何显示结果?我已经用DBMS.Output和一个循环尝试过了,但这并不是我想要的。我需要在运行此命令时,将其显示为GUI中的正常结果集。有没有人能告诉我在oracle中是如何做到这一点的
我感谢每一个答案
谢谢pat实际上我不理解你的动态查询。但根据我的理解,这个查询是多行结果集。因此,您需要使用批量收集并通过输出进行迭代,以便显示 有两种方法 1仅显示输出
SET serveroutput ON;
DECLARE
plsql_block VARCHAR2(500);
lv_col1 VARCHAR2(10):='1';
lv_col2 VARCHAR2(10):='2';
type tab_var
IS
TABLE OF VARCHAR2(10);
tab tab_var;
BEGIN
plsql_block := 'SELECT CONCAT('||lv_col1||','||lv_col2||') FROM dual';
EXECUTE immediate plsql_block bulk collect INTO tab;
FOR i IN tab.first..tab.last
LOOP
dbms_output.put_line(tab(i));
END LOOP;
END;
2方法是将其重构为一个函数,然后按如下方式使用它
创建表类型
create or replace
type string_table
IS TABLE OF VARCHAR2(100);
CREATE OR REPLACE
FUNCTION func_mu
RETURN string_table
AS
plsql_block VARCHAR2(500);
lv_col1 VARCHAR2(10):='1';
lv_col2 VARCHAR2(10):='2';
tab string_table;
BEGIN
plsql_block := 'SELECT CONCAT('||lv_col1||','||lv_col2||') FROM dual';
EXECUTE immediate plsql_block bulk collect INTO tab;
RETURN tab;
END;
SELECT * FROM TABLE(func_mu);
如果您使用相应的Oracle客户端安装在Oracle 12c上,则可以执行以下操作:
declare
l_resultset sys_refcursor;
l_sql_text varchar2(500) :=q'{select 'Hello, 12c!' as greeting from dual}';
begin
open l_resultset for l_sql_text;
dbms_sql.return_result(l_resultset);
end;
未经测试,因为我现在不在12c命令行附近。将逻辑添加到管道函数中,并在应用程序层中调用它。不清楚要做什么。你能举例说明你的问题会有什么结果吗?第二个解决方案正是我想要的。非常感谢你