【问题标题】:Return variable from stored procedure call as output value for variable从存储过程调用返回变量作为变量的输出值
【发布时间】:2019-02-06 20:14:37
【问题描述】:

我目前正在运行一个存储过程,它运行成功,但在调用一个单独的过程之后,我想返回 V_R_ID 的值作为输出值,以存储在 PHP 中

所以在这个例子中:

P1 : BEGIN ATOMIC

DECLARE V_H_ID INTEGER DEFAULT 0 ;
DECLARE V_R_ID VARCHAR ( 20 ) ;
DECLARE V_TIMESTAMP TIMESTAMP ;

DECLARE C_NAME VARCHAR ( 45 ) DEFAULT 'EMAIL' ;

SELECT CAST ( NEXT VALUE FOR SCHEMA . H_ID_SEQUENCE AS VARCHAR ( 20 ) )
INTO V_R_ID
FROM SYSIBM . SYSDUMMY1 ;

CALL PROCEDURESCHEMA . INSERT_TYPE ( 
V_R_ID
, C_NAME
, IN_DATA
, NULL
, NULL ) ;

/*Here I'd like to declare V_R_ID as an output of RETURN_ID */

END P1 

如何正确执行此操作,以便在 PHP 中调用此过程后,我可以将 RETURN_ID 设置为 php 变量 $returnID

【问题讨论】:

    标签: php sql db2


    【解决方案1】:

    考虑声明一个来自DB2 docs的输出参数:

    仅输出参数,将值从存储过程返回给调用程序。

    CREATE PROCEDURE myProc (OUT V_R_ID  VARCHAR (20))
    
       LANGUAGE SQL 
    
    P1 : BEGIN ATOMIC
    
       DECLARE V_H_ID INTEGER DEFAULT 0 ;
       DECLARE V_R_ID VARCHAR ( 20 ) ;
       DECLARE V_TIMESTAMP TIMESTAMP ;
    
       DECLARE C_NAME VARCHAR ( 45 ) DEFAULT 'EMAIL' ;
    
       SELECT CAST ( NEXT VALUE FOR SCHEMA . H_ID_SEQUENCE AS VARCHAR ( 20 ) )
       INTO V_R_ID
       FROM SYSIBM . SYSDUMMY1 ;
    
       CALL PROCEDURESCHEMA . INSERT_TYPE ( 
          V_R_ID
        , C_NAME
        , IN_DATA
        , NULL
        , NULL ) ;
    
    END P1 
    

    然后在 PHP 中,使用 PDO prepared statement,调用带有 ? 占位符的过程并将其绑定到 PHP 变量:

    $dbh = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=****;" .
                   "HOSTNAME=##.##.##.###;PORT=####;PROTOCOL=TCPIP;", "user", "pass");
    
    $stmt = $dbh->prepare("CALL myProc(?)"); 
    $stmt->bindParam(1, $return_id, PDO::PARAM_STR, 20); 
    $stmt->execute();
    
    echo $return_id;
    

    类似但略有不同,使用 PHP 的 IBM DB2 module 连接绑定参数到变量的字符串名称:

    $conn = db2_connect($database, $user, $password);
    
    $stmt = db2_prepare($conn, "CALL myProc(?)");
    db2_bind_param($stmt, 1, "return_id", DB2_PARAM_OUT);
    db2_execute($stmt);
    
    echo $return_id;
    

    【讨论】:

    • 非常感谢,这很有道理,我会尽快尝试
    • 如果我在 pdo 中使用输入调用它,我必须绑定这些并将其作为输出参数调用,对吗?
    • 是的,为每个需要的对应输入或输出参数添加bindParam 行匹配? 占位符。
    • 因此,它不允许将其作为输出参数,因为它不是唯一的,所以我将其设为 OUT_V_R_ID。那应该仍然按预期工作吧?我无法在 IDE 中运行它并返回 ID
    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多