Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Oracle cursor records 
:(
    Опции темы
bns12
Дата 7.5.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



В базе Oracle есть хранимая функция:

TYPE Customers_t IS RECORD
{
  name VARCHAR(256),
  id VARCHAR(8)
}

TYPE CustomersCur IS REF CURSOR RETURN Customers_t.

FUNCTION fetchCustomers
RETURN CustomersCur_t

В SQLPLUS запрос "select queries.fetchCustomers from dual" возвращает все данные. Когда делаю это на perl, курсор возвращает HASH. А как достать из него данные - непонятно.

my $db=DBI->connect(....);
my $sql='BEGIN OPEN :rc FOR SELECT queries.fetchCustomers FROM dual;END;';
my $cursor;
my $pst=db->prepare($sql);
$pst->bind_param_inout(":rc",\$cursor, 0, {ora_type=>ORA_SET});
$pst->execute();
while( my @row = $cursor->fetchrow_array(){
  print @row;
}

Вот этот самы row содержит DBI::st=HASH.

Может быть кто-нибудь значет, как из него получить данные?

Спасибо. 

PM MAIL   Вверх
shamber
Дата 8.5.2008, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



Код

use Data::Dumper;

print Dumper  @row;

А потом посмотрев структуру, выбираешь то что нужно.
PM MAIL Jabber   Вверх
ginnie
Дата 8.5.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



bns12, у Вас же данные должны в переменной $cursor быть, а не в @row.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
ramus
Дата 8.5.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: нет
Всего: 1



предыдущий пост удалил, так как написал чушь smile


Возможно не существенно, но бросилось в глаза:
1. код лучше оформлять как код
2. 
Код

$sth1->bind_param_inout(":cursor", \$sth2, 0, { ora_type => ORA_RSET } );

именно ORA_RSET а не ORA_SET
3. и в оракле лучше использовать VARCHAR2, а не VARCHAR

Это сообщение отредактировал(а) ramus - 11.5.2008, 19:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.