I'm trying to do a select within a stored procedure.  The problem is in getting 
results back.   It may have something to do with trying to access a table of returned 
values, and my colleague set this up to work with microsoft access, so I'm sure it 
must work via perl.


The direct select statement works fine:
#!/usr/local/bin/perl
use DBI;
require "/proj/dsa/www/shared/perl/config.ph";
$dbh = DBI->connect($main::DB_DATASOURCE, $main::DB_ROOT,$main::DB_ROOT_PWD,'Or
acle');

$uid="h-grange";
print "uid:$uid\n";

$cursor = $dbh->prepare(" select DSAA02_APPLICATION_C,DSAA03_TOKEN_C from mdsaa
11_stusraptkn where DSAA14_USERID_C='$uid'");

$cursor->execute();

$array_ref=$cursor->fetchall_arrayref();
#print "cursor execute is ok<br>";
$dbh->disconnect;
foreach $row (@$array_ref) {
 ($app,$tok)=@$row;
 print "app,tok:$app,$tok\n";
}
$dbh->disconnect;

Trying to access it via stored procedure never produces any data:
#!/usr/local/bin/perl
use DBI;
require "/proj/dsa/www/shared/perl/config.ph";
$dbh = DBI->connect($main::DB_DATASOURCE, $main::DB_ROOT,$main::DB_ROOT_PWD,'Oracle');

$cursor = $dbh->prepare("begin sp_Sel_mdsaa11_table.get_token1()");

print "cursor:$cursor\n";

$cursor->execute();
$array_ref=$cursor->fetchall_arrayref();
print "array_ref:$array_ref\n";

foreach $row (@$array_ref) {
 print "row:$row\n";
  foreach $tok (@{$row}){
  print "tok:$tok\n";
 }
}
$dbh->disconnect;

The stored procedure is a bit strange, but should produce a table of the results:

CREATE OR REPLACE PACKAGE sp_Sel_MDSAA11_table
 AS
   TYPE token is TABLE of VARCHAR2(100)
   INDEX BY BINARY_INTEGER;
   PROCEDURE get_token1(t_tok OUT token);
   PROCEDURE get_token2(strName IN VARCHAR, strApp IN VARCHAR, t_tok OUT token)
;
   PROCEDURE get_user_app_token(strName IN VARCHAR, strApp IN VARCHAR, t_tok OU
T token, t_count OUT token, t_site OUT token, t_sitet OUT token);
   PROCEDURE get_user_token(strName IN VARCHAR, t_app OUT token, t_tok OUT toke
n, t_count OUT token, t_site OUT token, t_sitet OUT token);
   PROCEDURE get_user_app(strName IN VARCHAR,  t_app OUT token);
END sp_Sel_MDSAA11_table;
/
create or replace package body sp_Sel_MDSAA11_table
as
PROCEDURE get_token1(t_tok OUT token)
IS
CURSOR token_cur IS
            SELECT *
            FROM mdsaa11_stusraptkn WHERE DSAA14_USERID_C = 'h-grange';

percount NUMBER DEFAULT 1;
BEGIN
    FOR single_token IN token_cur
    LOOP
            t_tok(percount) := single_token.DSAA02_APPLICATION_C;
            percount := percount + 1;
    END LOOP;
END;


END;
/

The output I get from this last is attempt is:
cursor:DBI::st=HASH(0x1aa660)
array_ref:ARRAY(0x186e54)

Which begs the question, if $array_ref is an array, why won't the foreach loop produce 
data?  There are some 8 rows that should come through in the select.

Tim Vorce
[EMAIL PROTECTED]
313-248-9985

Reply via email to