【问题标题】:Wrapping procedure calls in one main procedure在一个主过程中包装过程调用
【发布时间】:2019-05-25 19:02:59
【问题描述】:

我有四个工作存储过程 (DB2),每个都接受自己的参数,但其中很多参数是相同的。

我正在尝试创建一个更大的包装程序,它基本上只是按顺序调用每个程序。大约有 10 个外部值作为它自己的参数进入包装程序。

在我调用所有 4 个子参数的主体内,我将混合使用外部参数以及从第一次调用派生的主 ID 参数。

如何使用外部参数以及第一次调用中捕获/派生的参数正确包装这四个过程调用?

参数:

FIRST_NAME
LAST_NAME
PROFILE_IMAGE
CODE
START_DATE
EXPIRE_DATE
PRIORITY
CUST_NUMBER
CONTACT_TYPE
CONTACT_VALUE


CALL FIRST_PROC(FIRST_NAME,LAST_NAME,PROFILE_IMAGE)
    --This returns ```FIRST_PROC_ID```

CALL SECOND_PROC(FIRST_PROC_ID, CODE,START_DATE,EXPIRE_DATE,PRIORITY)

CALL THIRD_PROC(FIRST_PROC_ID,CODE,CUST_NUMBER,START_DATE,EXPIRE_DATE,PRIORITY)

CALL FOURTH_PROC(FIRST_PROC_ID,CONTACT_TYPE,CONTACT_VALUE,START_DATE,EXPIRE_DATE)

【问题讨论】:

  • 将提供的参数传递给每个存储过程,并将第一个存储过程的结果输出到一个变量。您是否在问如何将第一个存储过程的结果输出到您可以在其他 3 个中使用它的位置?还是你问怎么写存储过程?
  • 在这种情况下,我对编写 proc 感到很自在,因为我基本上只是在这个程序的主体中调用带有自己参数的过程。我最大的问题是如何捕获正文中的一个程序的输出,以便在其他程序中使用

标签: sql stored-procedures db2


【解决方案1】:

使用GET DIAGNOSTICS 语句。

--#SET TERMINATOR @

SET SERVEROUTPUT ON@

CREATE OR REPLACE PROCEDURE TEST1(P_FIRST_PROC_ID INT)
BEGIN
  RETURN P_FIRST_PROC_ID;
END@

BEGIN
  DECLARE V_RC INT;
  CALL TEST1(10);
  GET DIAGNOSTICS V_RC = DB2_RETURN_STATUS;
  CALL DBMS_OUTPUT.PUT_LINE('Return Status: '||V_RC);
END@

【讨论】:

  • 那么,如果我的第一个调用返回了我想要的资源,我可以使用该语句返回它并在下一次调用中使用它?
  • 是的。请参阅上面的示例,如果您使用 DB2 CLP 运行它,它必须打印 Return Status: 10 字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
相关资源
最近更新 更多