oracle 如何以表格的形式显示动态查询的输出

k3bvogb1  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(152)

我在Oracle PL/SQL中有一个巨大的动态查询。我的要求是以表格的形式显示这个查询输出。我已经将动态查询保存在一个变量中。现在使用光标循环它。但输出不是表格的形式。下面是一个简短的例子:

set serveroutput on

declare 
TYPE EmpCurTyp IS REF CURSOR;
v_emp_cursor EmpCurTyp;
var1 varchar2(1000) :='select document_id  from blu_payment_report_history' ;
var2 varchar(100) := ' where rownum <=3 ';
output varchar(100);
finalvar varchar(100);

begin
finalvar:= var1 || ' ' || var2;
OPEN v_emp_cursor FOR finalvar;
  LOOP
    FETCH v_emp_cursor INTO output;
    dbms_output.put_line(output);
    EXIT WHEN v_emp_cursor%NOTFOUND;
  END LOOP;
 CLOSE v_emp_cursor;
end;

如何修改上面的代码以表格的形式输出。注意:这只是一个包含一列的示例。我的实际查询有10列。
下面是我的查询的输出。但这不是表格的形式:

9rbhqvlz

9rbhqvlz1#

创建一个程序:

CREATE PROCEDURE get_payment_report_history(
  v_cur OUT SYS_REFCURSOR
)
IS
  v_sql varchar2(1000) := 'select document_id from blu_payment_report_history where rownum <=3 ';
BEGIN
  OPEN v_cur FOR v_sql;
END;
/

这将返回一个包含行和列的结果集。
你如何选择显示是无关紧要的;光标将包含行和列。
在PL/SQL developer中,您需要使用您的代码返回结果集并将光标显示到控制台:

DECLARE
  v_cur  SYS_REFCURSOR;
  v_col1 NUMBER;
BEGIN
  get_payment_report_history(v_cur);

  LOOP
    FETCH v_cur INTO v_col1;
    EXIT WHEN v_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(output);
  END LOOP;
  CLOSE v_cur;
END; 
/

在PowerBI中,您将调用存储过程,然后处理返回的游标;你不需要PL/SQL Package 器来显示返回的结果。
在Oracle 12和更高版本中,您还可以使用DBMS_SQL.RETURN_RESULT隐式返回游标,而不是返回游标。

CREATE PROCEDURE get_payment_report_history
IS
  v_cur SYS_REFCURSOR;
  v_sql varchar2(1000) := 'select document_id from blu_payment_report_history where rownum <=3 ';
BEGIN
  OPEN v_cur FOR v_sql;
  DBMS_SQL.RETURN_RESULT(v_cur);
END;
/

如果您的客户端支持,则用途:

EXECUTE get_payment_report_history();

调用该过程,该过程将隐式返回游标中包含的结果集。

相关问题