oracle中,一个存储过程怎么调用另一个存储过程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中,一个存储过程怎么调用另一个存储过程?相关的知识,希望对你有一定的参考价值。

参考技术A 已经有人回答的很专业了!\\x0d\\x0a原则就是:你要调用哪个存储过程,就要为该存储过程传入它需要的参数\\x0d\\x0a它定义的几个,你就传入几个\\x0d\\x0a当然参数的类型要对应上。\\x0d\\x0a还有就是如果一个存储过程中定义了out类型的参数,当你在调用它的时候,这个out类型的参数也要参入,看它定义的是什么类型的out参数。然后定义一个该类型的变量,传入进去,用于接收存储过程返回的值。然后用这个值,去做下面的逻辑。

从另一个存储过程 oracle 调用存储过程

【中文标题】从另一个存储过程 oracle 调用存储过程【英文标题】:Calling stored procedure from another stored procedure oracle 【发布时间】:2015-10-30 07:10:31 【问题描述】:

我们如何从另一个存储过程调用一个存储过程? 下面是我的代码,我试图从另一个存储过程中调用一个存储过程,但是编译会出错

CREATE OR REPLACE PROCEDURE USP_BookMovieTickets
(
  p_SIId number,
  p_NoOfTickets number,
  p_TicketPrice number,
  p_TicketTaxes number,
  p_TicketTotal number,
  p_EmailID varchar2
)
AS
  v_tid_         NUMBER(10);
  v_uid_         NUMBER(10);
  v_ord_         VARCHAR2(8);
  v_cnt          NUMBER(10);
  v_insertticket NUMBER(10);
  BEGIN

    execute USP_INSERTTICKETINFO( p_SIId, p_NoOfTickets, p_TicketPrice, p_TicketTaxes, p_TicketTotal);

    --EXECUTE IMMEDIATE  USP_InsertTicketInfo; p_SIId, p_NoOfTickets, p_TicketPrice, p_TicketTaxes, p_TicketTotal

    SELECT MAX(tid) INTO v_tid_ FROM bm_ticketinfo;

    SELECT COUNT(*) INTO v_cnt FROM bm_userdetails WHERE emailid = p_emailid;

    IF (v_cnt > 1) THEN

      SELECT UId INTO v_uid_
      FROM bm_userdetails WHERE emailid = p_emailid;

    ELSE

      execute USP_InsertUserDetails(' ', p_EmailID, ' ', ' ')

      --EXECUTE IMMEDIATE  USP_InsertUserDetails; '',p_EmailID,'',''

      SELECT MAX(UId) INTO v_uid_ FROM bm_userdetails;

    END IF;

    execute USP_InsertUserDetails(v_UId_, v_UId_, NULL, 17, 1,13, p_TicketTotal)

    --EXECUTE IMMEDIATE  v_Ord_; = USP_InsertBookingHistory v_UId_,v_TId_,NULL,17,1,13,p_TicketTotal
  END;
  /

错误:

Error(16,9): PLS-00103: Encountered the symbol "USP_INSERTTICKETINFO"
when expecting one of the following:     := . ( @ % ; immediate The
symbol ":=" was substituted for "USP_INSERTTICKETINFO" to continue.

【问题讨论】:

【参考方案1】:

相反

EXECUTE USP_INSERTTICKETINFO( p_SIId, p_NoOfTickets, p_TicketPrice,p_TicketTaxes,p_TicketTotal);

只是为了使用

USP_INSERTTICKETINFO( p_SIId, p_NoOfTickets, p_TicketPrice,p_TicketTaxes,p_TicketTotal);

【讨论】:

以上是关于oracle中,一个存储过程怎么调用另一个存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 中调用另一个存储过程

sybase存储过程中怎么调用存储过程

从另一个存储过程 oracle 调用存储过程

在oracle中 存储过程如何调用存储过程?

在 Oracle 中从另一个存储过程调用一个存储过程

oracle存储过程查找表数据插入另一个表中。。