2017-07-28 6 views
1

Ich bin ein sehr Anfänger Julia Benutzer aber möchte es für einige meiner Projekte verwenden.running sqlplus aus Julia

Viele meiner Projekte erfordern eine schnelle Verbindung zu Oracle, um eine ID-Nummer einiger anderer Daten zu erhalten. Ich kann dies tun, indem ich sqlplus von anderen Programmen wie Shell oder tcl aus starte, aber ich habe die Syntax in der Julia-Dokumentation ausprobiert, aber bekomme immer den einen oder anderen Fehler.

In Tcl es so etwas wie dieses

exec sqlplus -s user/[email protected] << " 
      SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
      select ID from table1 where name='abc'; 
      exit; 
      " 

Von julia sieht, ich versuche den Fahrbefehl wie diese

run(`sqlplus -s user/[email protected] << " 
    SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
    select ID from table1 where name='abc'; 
    exit; 
    " 
    `) 

aber ich von Julia verschiedene Fehler wie

bekommen zu verwenden,
Stacktrace: 
[1] depwarn(::String, ::Symbol) at ./deprecated.jl:70 
[2] warn_shell_special(::String) at ./shell.jl:8 
[3] #shell_parse#236(::String, ::Function, ::String, ::Bool) at ./shell.jl:103 
[4] (::Base.#kw##shell_parse)(::Array{Any,1}, ::Base.#shell_parse, ::String, ::Bool) at ./<missing>:0 (repeats 2 times) 
[5] @cmd(::ANY) at ./process.jl:796 
[6] eval(::Module, ::Any) at ./boot.jl:235 
[7] eval_user_input(::Any, ::Base.REPL.REPLBackend) at ./REPL.jl:66 
[8] macro expansion at ./REPL.jl:97 [inlined] 
[9] (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:73 

Irgendwelche Hilfe von irgendjemandem?

+0

versuchen Sie den 'pipeline' Befehl anstelle von' << ' –

+0

bereits versucht, dass. Ich bekomme einen Fehler wie "konnte nicht spawn sqlplus -s Benutzer/pass @ dbname. Keine solche Datei oder Verzeichnis" – Jonjilla

+0

Jon: für mich bedeutet dieser besondere Fehler "sqlplus" ist nicht im Pfad/zugänglich von Ihrer Julia-Umgebung. I.e. Es hat nichts mit der speziellen Syntax zu tun, die Sie verwendet haben (das bedeutet natürlich nicht, dass wenn Sie es in den Pfad einfügen, es sofort funktioniert, da die Syntax auch etwas falsch sein kann). –

Antwort

2

Hier ist eine Funktion, die auf meiner Maschine funktioniert, es gibt auch die Ausgabe von sqlplus Befehl in einer Variablen (wenn dies erforderlich ist). Wenn die Ausgabe nicht benötigt wird, könnte eine einfachere Lösung verfügbar sein.

Es ist meist selbsterklärend (BTW mit Julia Version 0.6 sollte aber wahrscheinlich auf 0.5 arbeiten).

+0

Hier ist der Fehler, den ich von diesem Ausführen bekommen. ERROR: MethodError: Kann ein Objekt vom Typ Type {String} in ein Objekt vom Typ Array {UInt8,1} nicht 'konvertieren' Dies kann durch einen Aufruf des Konstruktors Array {UInt8,1} (...) entstanden sein, seit Typ Konstruktoren zurückfallen, um Methoden zu konvertieren. – Jonjilla

+0

1. welche Version Julia verwendest du? 2. Wo ist der MethodError im Skript? 3. Führt es den Fehler aus, wenn das Skript "wie es ist" mit "sqlplus_cmd = \' cat \ "statt" sqlplus "ausgeführt wird? –

+0

Ich verwende die freigegebene Version von 0.6. Ich benutze sqlplus_cmd als sqlplus, nicht als 'Katze', aber ich bekomme diesen Fehler bei beiden. Ich bin mir Ihrer Frage Nr. 2 nicht sicher. Woher weiß ich, woher der MethodError kommt? – Jonjilla