【问题标题】:Oracle Stored Procedure: Returning a Multiple RowsOracle 存储过程:返回多行
【发布时间】:2014-08-31 15:33:37
【问题描述】:

在我的存储过程中,它需要获取输入并将多行返回给前端应用程序。

但是存储过程会产生错误:

  • SQL 语句被忽略
  • 没有足够的值

如何解决?


对象类型

CREATE TYPE org_rspnsble_prsns_type 
    AS OBJECT (
    "appId" varchar2, 
    "orgId" varchar2, 
    "domainId" varchar2, 
    "leadName" varchar2, 
    "personId" number
);

表格类型

CREATE TYPE org_rspnsble_prsns_table 
AS TABLE OF org_rspnsble_prsns_type;

存储过程

CREATE OR REPLACE PROCEDURE GetNames( appIdInput IN varchar2, orgIdInput IN varchar2, p_arr OUT org_rspnsble_prsns_table )
AS
BEGIN
    SELECT "appId", "orgId", "domainId", "leadName", "personId"
    BULK COLLECT INTO p_arr
    FROM (
        select "appId", "orgId", "domainId", "leadName", "personId"
        from tableA
    UNION
        select "appId", "orgId", "domainId", "leadName", "personId"
        from tableB
    )
    WHERE "appId" = appIdInput
    AND "orgId" = orgIdInput;
END;

【问题讨论】:

  • 尽量避免来自任何地方的" "
  • 什么时候出现错误?当您创建过程或调用它时?
  • 嗨,Emmanuel,是的,当我创建程序时。谢谢。

标签: sql oracle stored-procedures plsql procedure


【解决方案1】:

我找到了一个很好的方法: https://asktom.oracle.com/pls/apex/ASKTOM.download_file?p_file=6551171813078805685

create or replace package types 
as 
    type cursorType is ref cursor; 
end; 
/
create or replace function sp_ListEmp return types.cursortype 
as 
    l_cursor    types.cursorType; 
begin 
    open l_cursor for select ename, empno from emp order by ename;
    return l_cursor; 
end; 
/
create or replace procedure getemps( p_cursor in out types.cursorType )
as
begin
open p_cursor for select ename, empno from emp order by ename;
end;
/

感谢所有回答的人。

【讨论】:

    【解决方案2】:

    您的 SELECT 将 5 列选择为 1 个变量。你必须要么
    A)在您的选择中创建对象:

    SELECT org_rspnsble_prsns_type("appId", "orgId", "domainId", "leadName", "personId")
    BULK COLLECT INTO p_arr
    ...
    

    或 B) 将类型创建为记录:

    CREATE TYPE org_rspnsble_prsns_type 
    AS RECORD (...
    

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 1970-01-01
      • 2011-01-31
      • 2019-06-03
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多