Я пытаюсь сделать две вещи, используя функции PHP OCI Oracle:
- Запустить процедуру пакета в базе данных Oracle.
- После того, как пакет Выполнено, запросите временную таблицу, чтобы получить результаты операции процедуры.
Я могу сделать это успешно, используя программное обеспечение SQL Developer, предоставленное Oracle. Мой запрос чрезвычайно прост c и его можно увидеть ниже:
BEGIN
PKG_KTY_SEARCH.PR_PRICE_LIST();
END;
/
SELECT * FROM kty_web.KTY_PROD_PRICE_TEMP;
Этот код выше работает отлично, и я получаю полную таблицу результатов в SQL Developer.
Я пытаюсь сделать то же самое выше в PHP, используя OCI. Мой код можно увидеть ниже:
<?php
// Load up the system.
require('../../system/init.php');
global $config;
$oracleDb = oci_new_connect($config['oracleDb']['username'], $config['oracleDb']['password'], $config['oracleDb']['connectionString']);
$firstStid = oci_parse($oracleDb, "BEGIN PKG_KTY_SEARCH.PR_PRICE_LIST(); END;");
oci_execute($firstStid);
$secondStid = oci_parse($oracleDb, "SELECT * FROM kty_web.KTY_PROD_PRICE_TEMP");
oci_execute($secondStid);
oci_fetch_all($secondStid, $result);
echo json_encode($result);
echo "<br />Import complete!";
?>
Это, однако, не возвращает ошибок и пустой набор результатов. Я не могу понять, почему. Кто-нибудь видел здесь что-нибудь очевидное, что мне не хватает?
Набор результатов, возвращаемый PHP
{"PRODUCT_ID":[],"CUST_ROLE":[],"MIN_QTY":[],"MAX_QTY":[],"PRICE":[]}
Моя строка подключения выглядит следующим образом:
$config['oracleDb']['connectionString'] = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = " . $config['oracleDb']['host'] . ")(PORT = " . $config['oracleDb']['port'] . ")))(CONNECT_DATA=(SID=" . $config['oracleDb']['sid'] . ")))";
Я использую PHP7 .1.22 и Oracle 11g базу данных. Я могу запросить обычные таблицы и получить результаты без проблем в пределах PHP и получить полный набор результатов.