Попытка получить доступ к функции выбора из Oracle с PHP - PullRequest
3 голосов
/ 20 января 2011

Здравствуйте. Я пытаюсь получить доступ к простой функции, которая возвращает результат запроса select, и когда я обращаюсь к нему с помощью PHP, он отбрасывает на меня ресурс (5), а не результат.

$connect = oci_connect('tiger','scott','host/user');
if(!$connect){
$e = oci_error();
trigger_error(htmlentities($e['message'],ENT_QUOTES),E_USER_ERROR);
}


$qu = oci_parse($connect, 'select selectMe(:name) from dual');
$name = (string)'test1';
oci_bind_by_name($qu,":name",$name);

oci_execute($qu);

$row = oci_fetch_assoc($qu);
var_dump($row);

Функция selectMe довольно проста и просто извлекает данные из таблицы и возвращает несколько строк, соответствующих условию.

CREATE OR REPLACE FUNCTION selectMe( temp_name varchar2(100) ) 
  return SYS_REFCURSOR is  my_ret SYS_REFCURSOR;
BEGIN
 open my_ret
   FOR select myTab_ID, myTab_NAME, myTab_AGE, myTab_SCORE 
         from myTab 
        where trim(myTab_name) = temp_name;
   RETURN my_ret;   
END;

Что довольно просто.Теперь я не могу понять, почему я получаю ресурс (5), который указывает на ошибку.Фактическое сообщение, которое я получаю, когда я var_dump, получаю результат

array (1) {["SELECTME (: NAME)"] => resource (5) типа (оператор oci8)

Ответы [ 2 ]

5 голосов
/ 20 января 2011

Я не разработчик PHP.Тем не менее, я могу свободно воровать из Oracle PHP wiki , чтобы догадаться, что это будет выглядеть примерно так:

$conn = oci_connect('myusername', 'mypassword', 'mydb');

$stid = oci_parse($conn, "begin :rc := selectMe(:name); end;"); 
$refcur = oci_new_cursor($conn);
oci_bind_by_name($stid, ':rc', $refcur, -1, OCI_B_CURSOR);
oci_bind_by_name($stid, ':name', 'test1');
oci_execute($stid);

oci_execute($refcur);
oci_fetch_all($refcur, $res);
var_dump($res);

oci_free_statement($stid);
oci_close($conn);
0 голосов
/ 20 января 2011

Рабочий пример для определения selectMe ():

<?php

$conn = oci_connect('cj', 'cj', 'localhost/xe');

$stid = oci_parse($conn, "select selectMe(:name) as rc from dual"); 
$name = (string)'test1';
oci_bind_by_name($stid, ":name", $name);
oci_execute($stid);
$r = oci_fetch_array($stid);

$refcur = $r['RC'];  // the returned record is the REF CURSOR which can be treated like a PHP statement resource
oci_execute($refcur);
oci_fetch_all($refcur, $res);
var_dump($res);

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