1

我发现很难通过 perl 脚本调用存储过程(oracle)来获取记录。SP 接受 1 个输入,输出参数是光标

--------这里是perl脚本_----------------

my $dbh = DBI->connect("dbi:Oracle://**********",'**',***)  or die "Couldn't connect to database: " . DBI->errstr;// successfully connected
 
my $cursorRecords;   
my $categoryBind = 'tkuat';

my $sth= $dbh->prepare(q{
 BEGIN
       GetJobEnvironments(:category,:cursorTest);
END;
});

$sth->bind_param(":category", $categoryBind);  
$sth->bind_param_inout(":cursorTest", \$cursorRecords,20000,{ ora_type => ORA_RSET});    
$sth->execute or  die "Can't execute SQL statement\n";  
my @row=$cursorRecords->fetchrow_array();   
print("row:@row\n");  
print("cursorRecords:$cursorRecords\n");  
print Dumper($sth);

script is executing but not printing the records from the database
---O/p:--------

row:  
cursorRecords:DBI::st=HASH(0x1564318)  
$VAR1 = bless( {}, 'DBI::st' );
------------------------------

SP in Database looks as below    
create or replace PROCEDURE GetJobEnvironments
(
  v_category IN CHAR DEFAULT NULL,   
   v_cursor OUT SYS_REFCURSOR   
)
AS   

BEGIN    

   IF ( v_category IS NULL ) THEN     
       BEGIN   
          OPEN  v_cursor FOR   
          SELECT EnvVar ,  
          VALUE   
          FROM JobEnvironments  ;   
      END;    
   ELSE   
      BEGIN   
         OPEN  v_cursor FOR   
         SELECT EnvVar ,
         VALUE 
         FROM JobEnvironments    
         WHERE  Category = v_category ;   
      END;  
  END IF;   

EXCEPTION
  WHEN OTHERS THEN raise_application_error(-20002,SQLCODE||':'||SQLERRM);    
END;

JobEnvironments也​​有记录

中的引用bind() $cursorRecords可以保存表中的记录吗?有人可以帮忙吗?

----从表中记录-----

select * from  JobEnvironments
Category,EnvVar,Value,last_update
-----------------------------------
tkuat','REUTFEED_SUBJ','RSF.REC',;\'2010-04-07 06:00:33.0'
4

0 回答 0