2016-12-22 3 views
2

Ich habe os_command.exec verwendet, um Befehle an die Linux-Shell zu senden. Ich benutze Oracle 12c. HierAufruf von os_command.exec aus einer gespeicherten Oracle-Prozedur

ist ein Beispiel-Code, der gut arbeitet:

select os_command.exec('/home/smucha/app/smucha/product/12.1.0/dbhome_1/bin/sqlldr userid=system/password control=/home/smucha/load_data.cmt') 
from dual 

Ich mag würde einen ähnlichen Befehl in einer gespeicherten Prozedur auszuführen. Gibt es eine Möglichkeit, dies zu tun?

Ich habe Folgendes versucht, aber es funktioniert nicht. Meine Prozedur wird ohne Fehler ausgeführt, aber keine Datensätze werden geladen.

execute immediate 'select os_command.exec(''/home/smucha/app/smucha/product/12.1.0/dbhome_1/bin/sqlldr userid=system/acorp56k control=/home/smucha/IZ/load_data.cmt'') from dual'; 
+0

Vermutlich ist os_command eine gespeicherte Java-Prozedur mit PL/SQL-Function-Wrapper? Welchen Datentyp gibt das zurück? Es kann nützlich sein, mindestens die PL/SQL-Spezifikation anzuzeigen. (Es könnte sein [http://www.oracle.com/technetwork/database/enterprise-edition/calling-shell-commands-from-plsql-1-1-129519.pdf), so dass es ein zurückgibt int?) –

Antwort

3

Ihre Abfrage wird nie ausgeführt. From the documentation:

Wenn dynamic_sql_statement ist eine SELECT-Anweisung, und Sie weglassen sowohl into_clause und bulk_collect_into_clause, dann execute_immediate_statement nie ausgeführt.

Ihre execute immdiate keine into Klausel haben, so ist es im Wesentlichen ignoriert.

Sie brauchen nicht die Abfrage obwohl, können Sie die Funktion direkt aufrufen:

procedure foo is 
    result pls_integer; -- or whatever type your function actually returns 
begin 
    result := os_command.exec('/home/smucha/app/smucha/product/12.1.0/dbhome_1/bin/sqlldr userid=system/password control=/home/smucha/load_data.cmt'); 
    -- do something with the result? 
end foo; 

Als Nebenwirkung, könnte man mit einem externen Tabelle zu prüfen, anstatt einen Aufruf an SQL * Loader.

+0

Vielen Dank. Das hat mein Problem gelöst und alles funktioniert super! – smucha

Verwandte Themen