【问题标题】:Insert into Object Type and return from Stored procedure插入对象类型并从存储过程返回
【发布时间】:2014-10-18 20:37:22
【问题描述】:

我有一个表员工

EMPID                  EMPNAME                                                                                             
---------------------- ---------------------------------------------------------------------------------------------------- 
1                      prabhu                                                                                               
2                      b                                                                                                    
3                      c  

我想编写将输出参数作为对象发送的存储过程。

我在 proc 中的 Select 查询是

SELECT EMPID, EMPNAME FROM EMPLOYEE;

这将有多行,因此我想将此结果集作为对象传递

现在我将类型创建为,

CREATE OR REPLACE TYPE EMP IS OBJECT
    (EMPNO NUMBER,EMPNAME VARCHAR2(100));

过程:

create or replace PROCEDURE TYPEOUT(EOUT OUT EMP) AS

<code>

BEGIN

<CODE>
END TYPEOUT;

请帮我完成过程。

谢谢

【问题讨论】:

    标签: sql oracle plsql oracle11g plsqldeveloper


    【解决方案1】:

    如果你想返回多行,你需要一个支持多个实例的对象。也就是集合类型,比如嵌套表:

    CREATE OR REPLACE TYPE EMP_NT AS TABLE OF EMP;
    

    我们使用 BULK 操作填充嵌套表。所以你的过程看起来像这样(注意参数数据类型的变化):

    create or replace PROCEDURE TYPEOUT(EOUT OUT EMP_NT) 
    AS
    BEGIN
        select emp(empid, empname)
        bulk collect into eout
        from employee;
    END TYPEOUT;
    

    阅读对find out more about collections 的PL/SQL 参考。此外,该程序将使from exception handling 受益。

    【讨论】:

    • 我收到错误(2,25):PLS-00329:架构级类型非法引用 LIVERW.EMP 错误
    • 抱歉,我没有注意到您的表名实际上是 EMPLOYEE。我已经更正了我的代码:请再试一次。
    • 非常感谢。这是由于类型名称错误。这是我的错。请你帮我如何打印 eout 的值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多