【问题标题】:How to call procedure from another procedure in oracle plsql如何从oracle plsql中的另一个过程调用过程
【发布时间】:2021-06-24 17:08:35
【问题描述】:

我有两个程序,分别是 Procedure AProcedure B.

程序 B:

CREATE OR REPLACE PACKAGE pkg AUTHID CURRENT_USER AS
PROCEDURE B(document_id in  varchar2,
                                 display_type   in  varchar2,
                                 document   in out  NOCOPY varchar2,
                                 document_type  in out  NOCOPY varchar2,
                                 oracle_id in varchar2);

END pkg ;
/

我在过程 A 中使用过程 B

l_document_id := 'PLSQL:pkg.B(null,null,null,null,21)/' || v_seq_no;

执行过程 A 出错

过程/回调 'pkg.B(null,null,null,null,21)' 包含非法字符

【问题讨论】:

  • 请分享两个程序,或说明您遇到的问题的虚拟程序。

标签: oracle stored-procedures plsql


【解决方案1】:

您使用它的方式表明B 应该是一个函数,而不是一个过程。

或者,如果是一个过程,那么它应该有一个OUT参数,这个参数会返回到A的局部变量l_document_id中,比如

pkg_B(null, null, null, null, 21, l_document_id)
                                  -------------
                                    this

此外,您应该在调用 it 时删除单引号(无论“它”是什么,过程或函数):

No : 'pkg.B(null,null,null,null,21)/'      || v_seq_no     
Yes:  pkg.B(null,null,null,null,21) || '/' || v_seq_no

【讨论】:

    【解决方案2】:

    您需要两个变量来获取文档并从过程中返回:

    CREATE OR REPLACE PROCEDURE a AS
      v_document VARCHAR2(30000);
      v_document_type VARCHAR2(30000);
    BEGIN
      pkg.b (123, 'display type x', v_document, v_document_type, 123456);
    END a;
    

    【讨论】:

    • 只有当我使用参数调用 PROCEDURE B 时才会出现该错误。如果我不带参数调用它就没有错误
    • 我不明白如何在没有参数(又名参数)的情况下调用它。该过程需要其中五个:document_id、display_type、document、document_type 和 oracle_id。
    • 是的,这一行成功执行-> l_document_id := 'PLSQL:pkg.B/' || v_seq_no;
    • l_document_id := 'PLSQL:pkg.B/' || v_seq_no; 行不调用该过程。它只是用'PLSQL:pkg.B/123456' 之类的东西填充字符串l_document_id
    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2018-07-04
    • 1970-01-01
    • 2016-01-01
    • 2010-09-09
    相关资源
    最近更新 更多