2016-07-18 9 views
2

In Oracle SQL Developer, Substitutionsvariablen auf diese Weise unter Verwendung WORKS:Wie erhalten Sie Variablen, die wirklich in Oracle SQL Developer funktionieren?

DEFINE var_t1_id int = 2601; 
DEFINE var_t2_id int = (SELECT t2_id FROM table1 WHERE t1_id = &var_t1_id); 
DEFINE var_t3_id int = (SELECT t3_id FROM table1 WHERE t1_id = &var_t1_id); 

SELECT * 
FROM table2 
WHERE t2_id = &var_t2_id; 

SELECT * 
FROM table3 
WHERE t3_id = &var_t3_id; 

Obwohl, wenn ich die 2601 in etwas anderes zu ändern, und starten Sie die Abfrage, SQL Developer weiterhin für die 2601 verwenden Ersatz !!! Nicht das, was ich will ...

Ich versuchte dies:

variable var_t1_id number; 
variable var_t2_id number; 
variable var_t3_id number; 

exec :var_t1_id := 2601; 
exec SELECT t2_id INTO :var_t2_id FROM table1 WHERE t1_id = :var_t1_id; 
exec SELECT t3_id INTO :var_t3_id FROM table1 WHERE t1_id = :var_t1_id; 

SELECT * 
FROM table2 
WHERE t2_id = :var_t2_id; 

SELECT * 
FROM table3 
WHERE t3_id = :var_t3_id; 

und diese:

DEFINE var_t1_id int = 2601; 
DEFINE var_t2_id int = (SELECT t2_id FROM table1 WHERE t1_id = (SELECT &&var_t1_id from dual)); 
DEFINE var_t3_id int = (SELECT t3_id FROM table1 WHERE t1_id = (SELECT &&var_t1_id from dual)); 

SELECT * 
FROM table2 
WHERE t2_id = (SELECT &&var_t2_id FROM dual); 

SELECT * 
FROM table3 
WHERE t3_id = (SELECT &&var_t3_id FROM dual); 

aber keine richtig funktioniert - ich meine, sollte das Skript ausführen, ohne mich auffordert für Werte ...

Wie kann ich das lösen?

Ich bin an SQL Server gewöhnt, wo all das so einfach ist ... Natürlich vermisse ich Oracle Wissen ... Grund, warum ich hier nach Tipps frage.

+0

Wenn Sie nicht Ihre Bind-Variablen in SQL Developer definieren, erhalten Sie eine Eingabeaufforderung (gleiches Verhalten mit Substitutionsvariablen) erhalten. Sie können dieses Verhalten bei vielen Berichten als "out of the box" erkennen (z. B. in den Datenwörterbuchberichten). –

+0

Sprichst du vom 2. Codeblock? Im 3. habe ich einen DEFINE-Abschnitt - wenn das der richtige Weg ist, um bind vars zu definieren? – user3341592

+0

Ich sprach darüber, wie Substitutions- und Bind-Variablen im Allgemeinen in SQL Developer funktionieren (nicht zu einem bestimmten Beispiel, das Sie angegeben haben). Aus Oracle-Sicht werden Substitutionsvariablen hauptsächlich in SQL * Plus-Skripten verwendet (gut dokumentiertes Verhalten). Mit Bindevariablen werde ich sie in SQL Developer normalerweise in anonymen Block oder Objekte (z. B. Paket) oder DML verwenden. BTW, Justin Cave hat eine nette Antwort auf eine ähnliche Frage hier, http://stackoverflow.com/questions/5653423/how-doi-i-use-variables-in-oracle-sql-developer –

Antwort

0

Sie können mit INTO Stichwort versuchen

DECLARE 
    --all your variables 
    yout_variable_0 int := 1608; 
    your_variable_1 int; 
BEGIN 
    select [...] 
    into your_variable_1 
    from your_table 
    where your_column = your_variable_0; 
END; 

Jetzt wird Ihr Ergebnis in your_variable_1 gespeichert.

Sie können mit dieser einfachen Abfrage versuchen

DECLARE 
    --all your variables 
    your_variable_0 varchar2(200) := '201605'; 
    your_variable_1 varchar2(200); 
BEGIN 
    select your_variable_0 
    into your_variable_1 
    from dual; 

    dbms_output.put_line('Output ...' || your_variable_1); 

END; 
+0

Ich habe dein Skelett an meinen realen Anwendungsfall angepasst. Aber egal, was ich mache (durch Drücken von F5 oder durch Klicken auf den grünen Pfeil nach links), SQL Developer öffnet "Substitutionsvariable eingeben" für var_t2_id und var_t3_id ... Und ich kann diese Antworten nicht liefern: Diese sollen wann bekannt sein Ausführen der ersten "SELECT .. INTO .. ​​FROM" Anfragen ... Was ist das Problem? – user3341592

+0

Ich habe kein Vertrauen in SQLDeveloper, aber versuchen Sie, den gesamten Code, dann führen Sie es ... –

+0

Ich tat das auch ... Das gleiche Popup ... (PS- Was benutzen Sie?) – user3341592