OK,
Thanks for the replies, I Have delved even deeper into this, and it turns out that to get this working the way I want to, I have to call a oracle stored procedure and get it to return a Oracle cursor.
Therefore part of my code in the main program now looks like this.
my $accessroles;
$accessroles = $dbh_conn->run_query('check_user', "begin Mrf_Maint.
+check_user(?,?); end;", $login_id, $accessroles );
while(my $hashRef = $accessroles->fetchrow_hashref()){
foreach(keys %$hashRef){
print "$_ is $hashRef->{$_}<br>";
}
}
and in my database module, the run_query code looks like this
my $self = shift;
my $name = shift;
my $query = shift;
my $login_id = shift;
my $accessroles = shift;
my $ora = "ORA_RSET";
my $sth = $self->{'_conn'}->prepare($query) || print $DBI::errstr;
$sth->bind_param(1, $login_id);
$sth->bind_param_inout(2, \$accessroles, 0, { ora_type => 'ORA_RSET
+'} );
$sth->execute() || print $DBI::errstr;
return $accessroles;
The second parameter that I'm binding is the OUT parameter as well as being of type CURSOR, which is why it also needs a few more parameters in the bind_param_inout call (line 52 in module).
However The error message I now recieve is
Can't bind :p2, ora_type 0 not supported by DBD::Oracle at Database.pm line 52.
Any further suggestions would be great.
Ant
PS, pl/sql code looks like this
CREATE OR REPLACE PACKAGE Mrf_Maint AS
TYPE mrf_role IS REF CURSOR;
PROCEDURE check_user(mrfid IN VARCHAR,
+ mrfrole OUT Mrf_Maint.mrf_role);
END Mrf_Maint;
/
and body
CREATE OR REPLACE PACKAGE BODY Mrf_Maint
IS
PROCEDURE check_user(mrfid VARCHAR,
mrfrole OUT Mrf_Maint.mrf_role)
IS
crsr Mrf_Maint.mrf_role;
BEGIN
OPEN crsr FOR SELECT access_role FROM TABLE WHERE field = mrfid;
END;
END;
/
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.