如何从 Oracle SQL Developer 的查询窗口返回一组结果? [英] How do I return a set of results from a Query Window in Oracle SQL Developer?

查看:149
本文介绍了如何从 Oracle SQL Developer 的查询窗口返回一组结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于此代码:


DECLARE 
    v_APPL_ID               NUMBER(10,0) := 0;
    v_ADMIN_PHS_ORG_CODE    VARCHAR2(2 BYTE) := ' ';
    v_SERIAL_NUM            NUMBER(6,0) := 0;
    v_Proj_Appl_Rec         Proj_Appl_Rec;
    v_Proj_Appl_Tab         Proj_Appl_Tab := Proj_Appl_Tab();
    v_Proj_Appl_Cur         SYS_REFCURSOR;
    v_cnt                   NUMBER := 0;
    GrantApplications_CUR   SYS_REFCURSOR;

开始ireport_portfolios.GetPortfolioAppsAndProjects(null, 190, '动态', null, v_Proj_Appl_Cur);

BEGIN ireport_portfolios.GetPortfolioAppsAndProjects( null, 190, 'DYNAMIC', null, v_Proj_Appl_Cur);

--dbms_output.put_line('appl_id' || chr(9) || 'ic' || chr(9) || 'serial_num');   
LOOP
  FETCH v_Proj_Appl_Cur
  INTO v_APPL_ID, v_ADMIN_PHS_ORG_CODE, v_SERIAL_NUM;
  EXIT WHEN v_Proj_Appl_Cur%NOTFOUND;
  v_Proj_Appl_Tab.extend;
  v_cnt := v_cnt + 1;
  v_Proj_Appl_Tab(v_cnt) := Proj_Appl_Rec(v_APPL_ID, v_ADMIN_PHS_ORG_CODE, v_SERIAL_NUM);
  --dbms_output.put_line( v_APPL_ID || chr(9) || v_ADMIN_PHS_ORG_CODE || chr(9) ||  v_SERIAL_NUM);
END LOOP;
CLOSE v_Proj_Appl_Cur;

     OPEN GrantApplications_CUR FOR
      WITH Appls_CTE
      AS
      (
         SELECT DISTINCT
                pa.Appl_Id
           FROM TABLE(v_proj_appl_tab) pa
      )

      SELECT ga.appl_id, council_meeting_date
      FROM Appls_CTE ac
      JOIN grant_appls ga
      ON ac.appl_id = ga.appl_id;

    RETURN   GrantApplications_CUR;

结束;

如果我注释掉底部的 RETURN 语句,它运行良好.但我看到的是:匿名块完成.所以我添加了 Return 语句,现在我得到了:

it runs fine if I comment out the RETURN statement at the bottom. But all I see is: anonymous block completed. So I added the Return statement and now I get:

错误报告 -ORA-06550:第 41 行,第 9 列:PLS-00372:在过程中,RETURN 语句不能包含表达式ORA-06550:第 41 行,第 9 列:PL/SQL:忽略语句06550. 00000 - 第 %s 行,第 %s 列:\n%s"*原因:通常是 PL/SQL 编译错误.*动作:

Error report - ORA-06550: line 41, column 9: PLS-00372: In a procedure, RETURN statement cannot contain an expression ORA-06550: line 41, column 9: PL/SQL: Statement ignored 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:

我尝试将 CTE 取出并加入TABLE(v_proj_appl_tab) pa".但我得到了同样的错误.

I tried taking the CTE out and just joining to "TABLE(v_proj_appl_tab) pa". But I get the same error.

最后一步是什么才能看到结果?如何从一个简单的查询窗口返回这样的结果而不必编写 Package PROC?

What is the last step here to be able to see the results? How do you return results like this from a simple query window without having to write a Package PROC?

我尝试从下面的提示运行它:DBMS_SQL.RETURN_RESULT(GrantApplications_CUR);

I tried running this from the tip below: DBMS_SQL.RETURN_RESULT(GrantApplications_CUR);

现在我收到此错误:

错误报告 -ORA-06502: PL/SQL: 数值或值错误ORA-06512:在LINK_OD_IREPORT.IREPORT_PORTFOLIOS",第 217 行ORA-06512:在LINK_OD_IREPORT.IREPORT_PORTFOLIOS",第 83 行ORA-06512:在第 12 行06502. 00000 - PL/SQL:数字或值错误 %s"*原因:算术、数字、字符串、转换或约束错误发生.例如,如果尝试执行此操作,则会发生此错误将值 NULL 分配给声明为 NOT NULL 的变量,或者如果尝试将大于 99 的整数分配给变量声明 NUMBER(2).*操作:更改数据、操作方式或声明方式值不违反约束.现在我收到此错误:

Error report - ORA-06502: PL/SQL: numeric or value error ORA-06512: at "LINK_OD_IREPORT.IREPORT_PORTFOLIOS", line 217 ORA-06512: at "LINK_OD_IREPORT.IREPORT_PORTFOLIOS", line 83 ORA-06512: at line 12 06502. 00000 - "PL/SQL: numeric or value error%s" *Cause: An arithmetic, numeric, string, conversion, or constraint error occurred. For example, this error occurs if an attempt is made to assign the value NULL to a variable declared NOT NULL, or if an attempt is made to assign an integer larger than 99 to a variable declared NUMBER(2). *Action: Change the data, how it is manipulated, or how it is declared so that values do not violate constraints. Now I get this error:

推荐答案

在 12c 中,他们通过 DBMS_SQL.RETURN_RESULT 添加了对来自 PL/SQL 的隐式语句结果的支持.

In 12c they added support for Implicit Statement Results from PL/SQL via DBMS_SQL.RETURN_RESULT.

declare
  l_cursor_1 SYS_REFCURSOR;
BEGIN
  OPEN l_cursor_1 FOR
    SELECT table_name
    FROM   user_tables
    WHERE  rownum < 5;
  DBMS_SQL.RETURN_RESULT(l_cursor_1);
END;
/

这篇关于如何从 Oracle SQL Developer 的查询窗口返回一组结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆