Как отправить значение в базу данных Oracle? - PullRequest
0 голосов
/ 01 мая 2018

Мне нужно отправить номер счета третьей стороне (база данных Oracle), и они ответят мне в ответ на то же самое, что я пытался установить с ними связь, и я получил успешный результат, но сейчас мне нужно отправить SQL запрос, чтобы получить ответ, но, к сожалению, я не знаю, как отправить это. Вот мое соединение и код запроса, который я использовал: -

<?php
  $db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 83.111.41.30)(PORT = 1536)))(CONNECT_DATA=(SID=TEST)))" ;

  if($c = OCILogon("XXWEBSITE", "xxwebsite", $db))
  {
    echo 'success';
    $query = "BEGIN 
      P_INV_NUMBER := '34499';
      P_INV_NUM := NULL;
      P_UNIT_NO := NULL;
      P_CUST_NAME := NULL;
      P_INV_DATE := NULL;
      P_TRANS_TYPE := NULL;
      P_CUST_NO := NULL;
      P_OUTSTANDING_AMOUNT := NULL;
      L_ERROR := NULL;
      APPS.XX_AR_CUST_OS_BAL_PKG.XX_AR_CUST_OS_BAL_PROC ( P_INV_NUMBER, P_INV_NUM, P_UNIT_NO, P_CUST_NAME, P_INV_DATE, P_TRANS_TYPE, P_CUST_NO, P_OUTSTANDING_AMOUNT, L_ERROR );
      COMMIT; 
    END;";
      $stid = oci_parse($c, $query);
      $check =  oci_execute($stid);
 print_r($check);
       OCILogoff($c);
     }
  else
  {
      $err = OCIError();
      echo "Connection failed.";
  }
?> 

запрос, который они просили отправить, был: -

DECLARE 
      P_INV_NUMBER VARCHAR2(32767);
      P_INV_NUM VARCHAR2(32767);
      P_UNIT_NO VARCHAR2(32767);
      P_CUST_NAME VARCHAR2(32767);
      P_INV_DATE DATE;
      P_TRANS_TYPE VARCHAR2(32767);
      P_CUST_NO NUMBER;
      P_OUTSTANDING_AMOUNT NUMBER;
      L_ERROR VARCHAR2(32767);
    BEGIN 
      P_INV_NUMBER := '34499';
      P_INV_NUM := NULL;
      P_UNIT_NO := NULL;
      P_CUST_NAME := NULL;
      P_INV_DATE := NULL;
      P_TRANS_TYPE := NULL;
      P_CUST_NO := NULL;
      P_OUTSTANDING_AMOUNT := NULL;
      L_ERROR := NULL;
      APPS.XX_AR_CUST_OS_BAL_PKG.XX_AR_CUST_OS_BAL_PROC ( P_INV_NUMBER, P_INV_NUM, P_UNIT_NO, P_CUST_NAME, P_INV_DATE, P_TRANS_TYPE, P_CUST_NO, P_OUTSTANDING_AMOUNT, L_ERROR );
      COMMIT; 
    END;

Как отправить эти параметры, я пробовал один способ, но я не знаю, правильно ли это. Мне нужно отправить выше, чтобы получить результат, как я могу это сделать?

1 Ответ

0 голосов
/ 01 мая 2018

Возможно, вам лучше вызывать хранимую процедуру напрямую через PHP / OCI, чем пытаться сделать это через PL / SQL-запрос:

$stid = oci_parse($c, "call apps.xx_ar_cust_os_bal_pkg.xx_ar_cust_os_bal_proc('34499', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)");
oci_execute($stid);

Если вам нужно вернуть результаты хранимой процедуры, вам нужно использовать переменные связывания:

$stid = oci_parse($c, "call apps.xx_ar_cust_os_bal_pkg.xx_ar_cust_os_bal_proc('34499', :inv_num, :unit_no, :cust_name, :inv_date, :trans_type, :cust_no, :outstanding_amount, :err)");
/* Do this for each bind variable */
oci_bind_by_name($stid, ":inv_num", $inv_num);
...
oci_execute($stid);

РЕДАКТИРОВАТЬ: Передача параметра P_INV_NUMBER в качестве переменной связывания:

$stid = oci_parse($c, "call apps.xx_ar_cust_os_bal_pkg.xx_ar_cust_os_bal_proc(:inv_number, :inv_num, :unit_no, :cust_name, :inv_date, :trans_type, :cust_no, :outstanding_amount, :err)");
oci_bind_by_name($stid, ":inv_number", "34499");
/* Do this for each bind variable */
oci_bind_by_name($stid, ":inv_num", $inv_num);
...
oci_execute($stid);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...