2016-05-09 15 views
0

Ich führe diese Subroutine aus dem Hauptskript.Aufrufen einer gespeicherten Prozedur von Perl

print "parameter passed: $_[0]"; 
my $connect_string = 'test/[email protected]'; 
my $sqlplus_settings = ''; 
my $task = ''; 
my $result = qx { sqlplus $connect_string << EOF 
$sqlplus_settings exec {pkgname.procedure($_[0], 'abc',$task); 
#exit; 
EOF 

Wenn es aus dem Hauptskript {sub($var)} genannt zu werden, ist es den Druck der ersten Zeile mit dem Eingangsparameter. Aber die Prozedur wird nicht ausgeführt.

+0

Es gibt keine _subroutine_ in Ihrem Code. – simbabque

+5

Verwenden Sie [DBI] (http://p3rl.org/DBI), um mit einer Datenbank zu sprechen. – choroba

+0

Fügen Sie 'use strict' und' use warnings' hinzu. Aber auch ohne, sollte es Ihnen über die Syntaxfehler mit Ihrem HEREDOC erzählen. – simbabque

Antwort

0

Wie von Benutzer @choroba in den Kommentaren oben erwähnt, ist der beste Weg IMHO Perls DBI-Modul zu verwenden. Hier

ist ein Beispiel für Ihre gespeicherte Prozedur aufrufen, die mit Oracle funktionieren würde:

$dbh->do("BEGIN your_procedure; END;"); 

Und hier ist ein Link helfen Ihnen bei der DBI-Modul loszulegen:

Perl DBI

HTH

+0

Vielen Dank für Ihre Antworten. Ich konnte den gespeicherten Proc mit der Verwendung von DBI aufrufen. Ich habe gerade einige Zitate im letzten Code-Ausschnitt, den ich hier gepostet habe, vermisst. Danke noch einmal. – GSG

+0

@Gourab Sengupta - froh, dass wir helfen konnten. Kann ich bitte eine Antwort für diese Antwort bekommen? Danke im Voraus, – tale852150

0

für mich funktioniert diese Lösung gut:

my $execute=q~BEGIN your_procedure; END~; 
my $sth= $dbh->prepare($execute); 
    $sth->execute() 
Verwandte Themen