12. juni 2001 - 00:16
Der er
13 kommentarer og 1 løsning
Hvordan kalder man et procedure i oracle fra et script
Jeg har lavet en PL/SQL procedure, og denne vil jeg gerne kalde fra et perlscript... Kan det lade sig gøre?
Annonceindlæg fra Delegate
Hej Gooky Prøv om du kan få dette til at virke. use DBI; ##Connect to database my $dbh = DBI->connect(\"dbi:Oracle:host=$HOST;sid=$SID;port=1521\", $USER, $PSWD) || die \"Cannot access Oracle\\n\"; $dbh->{RaiseError} = 0; $dbh->func(100000, \'dbms_output_enable\'); my $statement = $dbh->prepare(q{ declare tmp varchar2(2000); begin tmp := function.call(:PARAM); end; }); $statement->bind_param(\":PARAM\", $param); if ($statement->execute()) { $tmp = $dbh->func(\"dbms_output_get\"); print OUT \"Result $tmp\"; }; $dbh->disconnect();
hvis man laver en raise, kommer det så som output i $tmp variablen?
Nej. Jeg mangler vist også lidt. Du skal efter tmp := func.... have en dbms_output.put_line(tmp); en eventuel raise vil du kunne fange i en else del på if ($statement->execure()) { det gik godt; }else{ det gik ikke godt; }
hmm, jeg har lige prøvet og jeg får en uventet fejl: no listener (DBD error: OCIServerAttach) Jeg kunne forestille mig at jeg har glemt at starte en process(på port 1521 - standard formoder jeg). Hvordan starter man lige den? Jeg er på en unix maskine...
Er du sikker på at listener processen lytter på port 1521
ok nu har jeg fundet ud af at starte den... så prøver jeg lige scriptet senere
hmmm, jeg kan kalde en procedure, men jeg kan ikke fange de raise\'s jeg har lavet... nogen ideer?
jeg har lavet en lille procedure her....: create procedure test as hej exception; begin raise hej; exception when others then dbms_output.put_line(\'hello world\'); end; / Mit perlscript ser således ud: use DBI; $dbh = DBI->connect(\"dbi:Oracle:dbname\",\'login\', \'pw\') or die \"LORT\"; $dbh->{RaiseError} = 1; $sth = $dbh->prepare(qq{ begin test; end; } ) or die \"LORT2\"; print \"LORT3\" unless $sth->execute; my $msg = $dbh->func( \'plsql_errstr\' ); print $msg, \"\\n\"; print $DBI::errstr, \"\\n\"; print $dbh->errstr, \"\\n\"; print $dbh->err, \"\\n\"; $dbh->disconnect; Ja, det var perl scriptet... Jeg skriver alle de fejlvariabler ud som jeg tror der kan ligge information i, men jeg får intet ud.... Jeg ved at jeg kører proceduren, så det er ikke det som er fejlen... NOGEN IDEER?????
13. juni 2001 - 02:11
#10
jeg har nu gjort således: set serverout off også kan jeg vha. $dbh->func( 100000,\'dbms_output_enable); @text = $dbh->func(\'dbms_output_get\'); print @text; få de ting ud som jeg skriver vha dbms_output.put_line, men det er en lidt ondsvag måde at teste for om der fejl syntes jeg....
13. juni 2001 - 02:15
#11
hmm serverout delen er vist lige meget....
13. juni 2001 - 07:32
#12
Desværre. Jeg har ikke prøvet at fange disse exceptions uden for pl/sql delen.
13. juni 2001 - 17:42
#13
ok, den opretter jeg så som et seperat spg. Tak for hjælpen.
06. juli 2001 - 00:47
#14
hmm
Computerworld tilbyder specialiserede kurser i database-management