Возврат переменной из вызова хранимой процедуры в качестве выходного значения для переменной - PullRequest
0 голосов
/ 06 февраля 2019

В настоящее время я выполняю хранимую процедуру, которая успешно выполняется, но после вызова отдельной процедуры я хотел бы вернуть значение 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?

1 Ответ

0 голосов
/ 06 февраля 2019

Рассмотрите возможность объявления выходного параметра, который из 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 оператор , вызовите процедуру с ? заполнителем и привяжите ее к переменной 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...