powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вызов функции пакета Oracle через PDO, не возвращает результат
5 сообщений из 5, страница 1 из 1
Вызов функции пакета Oracle через PDO, не возвращает результат
    #37845133
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите плиз с такой проблемкой – нужно вызвать функцию из пакетика (Oracle 11.2g XE)
Вот код
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$p_id = 552;
$p_summary_type = 1;
$p_date = '2012-06-19';
$result = '';

$stmt = $conn->prepare("USERSEL.USRNAME(:p_id, :p_type, :p_date);");
$stmt->bindParam(':p_id',  $p_id,  PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);
$stmt->bindParam(':p_summary_type',  $p_summary_type,  PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);
$stmt->bindParam(':p_date',  $p_date,  PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT,  12);
try {    
    $stmt->execute();
    $result =  $stmt->fetchAll();
    print_r( $result);
 }
 catch(PDOException $e){
     echo ($e->getMessage());
 }



В $result пусто :( При этом просто выборка из этой же таблицы в этой же базе отрабатывает на ура

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$q = "SELECT * FROM USRS";
$stmt = $conn->query($q);
$result = $stmt->fetchAll();
$sth = $conn->prepare($q);
$sth->execute();
$result = $sth->fetchAll();

 foreach ($conn->query($q) as $row) {
      print $row['ID'] . "       ";
     print $row['NAME_FIRST'] . "         ";
     print $row['NAME_LAST'] . "
";
  }



Так что проблема не в базе и не в коннекте. Сама функция объявлена так

Код: plsql
1.
2.
3.
4.
5.
FUNCTION usrname (p_id    IN usrs.id%type,
                              p_type IN integer    default std.c_summaryType_standart,
                              p_date        IN date                    default null
                             )
    RETURN varchar2



Я думал что проблема в дате - менял строку с ‘2012-06-12’ на ’12.06.2012’ и ’12-Jun-2012’ ’12-June-2012’ и все равно не работает. Подскажите плиз как правильно…
...
Рейтинг: 0 / 0
Вызов функции пакета Oracle через PDO, не возвращает результат
    #37845540
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoder,

p_date объявлена как дата. передавать значит нужно не строку а дату.
попробуйте так
Код: php
1.
2.
$p_date = '2012-06-19';
$stmt = $conn->prepare("USERSEL.USRNAME(:p_id, :p_type, to_date(:p_date,'yyyy-mm-dd') );");


либо внутри функции приводить строку к дате
...
Рейтинг: 0 / 0
Вызов функции пакета Oracle через PDO, не возвращает результат
    #37847104
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все к сожалению не так :( Я разрулил фишку НО вынужден отказаться от PDO. Тырнеты говорят что для оракла PDO еще слишком глюкаво и сыро. Пускать это в серьезный продакшн (а у меня именно такой) откровенно говоря стремно. буду рад если кто нибудь меня убедит в обратом.
Что касается моей топик проблемы то похоже функцию (не хранимку) вызвать средствами PDO вообще нельзя. Так я нарыл в тырнетах но могу впрочем ошибатся но сломав моск я не нашел решения. Итог переход на родной oci8. Тому кстати еще соображение что раз уж универсально (PDO) не получается и вряд ли в моем проекте будет миграция на другую БД если уж есть Оракл и моя контора готова отсыпать мешок звонких шекелей за нея. А в случае с oci8 это вроде как родное все и в случае чего можно оракл и пнуть официально - пусть работают. Такие дела.

Кстати даже на oci8 вызов функции это маленькое вуду и выглядит страшновато - что бы народ не мучался вот как заработало в моем случае...

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$c = oci_connect(…);

 // Calling packadge function
echo 'Sample package function calling';

$p_id = 552;
$p_summary_type = 2;
$p_date = '19.06.2012';
$result= "                                                                                                                                              ";
$s  = oci_parse($c, "begin :r :=package_name.func_name(:p_id, :p_summary_type, :p_date); end;");
if (!$s) {
    $m = oci_error($c);
    trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
}
oci_bind_by_name($s, ':r', $result);
oci_bind_by_name($s, ':p_id', $p_id);
oci_bind_by_name($s, ':p_summary_type', $p_summary_type);
oci_bind_by_name($s, ':p_date', $p_date);
$r = oci_execute($s);
print_r($result); // имеем щастье



в запросе ничего убрать нельзя - стоит убрать точку с запятой на конце не работает. Без begin end тоже не работет.
Что не решил ток это переменная $result= " ";

думаете зря она так? А вот и нет - если её объявить как пустую строку или как $result=Array(); или не объявить вовсе то не работате и оракл ругается что буфер недостаточного размера. Как красиво написать не подумал пока. Может быть кто подскажет? Дату тоже не получается так писать

Код: php
1.
2.
3.
$p_date = '2012-06-19';
..
$s  = oci_parse($c, "begin :r :=package_name.func_name(:p_id, :p_summary_type, to_date(:p_date,'yyyy-mm-dd') ); end;")



и опять же остается вопрос как быть - формат даты явно зависит от установленного у меня на компе а как будет в другом случае. Вообще в SQL стандарте принят формат даты YYYY-MM-DD и я как то привык уже этому следовать, а как тут дату приводить к какому то единому виду пока непонятно...

Вообщем все это сильно коряво выглядит но что делать.
...
Рейтинг: 0 / 0
Вызов функции пакета Oracle через PDO, не возвращает результат
    #37889440
Larush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, спасли меня !!!!
...
Рейтинг: 0 / 0
Вызов функции пакета Oracle через PDO, не возвращает результат
    #37889469
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы что - на свет лезете?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вызов функции пакета Oracle через PDO, не возвращает результат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]