Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Oracle cursor records


Автор: bns12 7.5.2008, 22:02
В базе 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.

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

Спасибо. 

Автор: shamber 8.5.2008, 08:27
Код

use Data::Dumper;

print Dumper  @row;

А потом посмотрев структуру, выбираешь то что нужно.

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

Автор: ramus 8.5.2008, 21:34
предыдущий пост удалил, так как написал чушь smile


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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)