2009-03-25 8 views
2

Ich habe eine Variable namens c_kilometer. Ich habe einen Cursor, der eine Reihe von Aufzeichnungen erfasst, die diese Kilometer haben. Ich muss zwei separate SELECT-Anweisungen im Cursor ausführen, die einfach einen Kilometer von einer Tabelle basierend auf den Werten im Cursor abrufen und eine andere SELECT-Anweisung ausführen, die dasselbe in einer anderen Tabelle tut.SELECT INTO Variable, zwei Anweisungen, Variablen hinzufügen

SELECT t.kilometers INTO c_kilometers 
FROM table_name WHERE WHERE l.code = cursor_t.code_att 

SELECT g.kilometers INTO c_kilometers 
FROM table_name WHERE l.code = cursor_t.code_aff 

Meine Frage ist, kann ich die c_kilometers zusammen, ohne eine temporäre Variable hinzufügen auf dem Wertes zu halten? Ich habe PL/SQL seit einiger Zeit nicht mehr benutzt, und ich kann mich nicht erinnern, dass ich das jemals machen muss, also ist das eher eine Lernfrage als alles andere.

+0

Es ist nicht klar, was Ihr zu tun versuchen. In Ihrem Beispiel wird c_kilometers von der zweiten Abfrage überschrieben. Bitte geben Sie einige Beispieldaten und Ergebnisse an, die Sie erhalten möchten. – Quassnoi

+0

Genau darum bitte ich. Ich möchte c_kilometer nicht überschreiben. Ich möchte sie zusammenfügen. Ist das Erstellen einer temporären Variable die Standardpraxis und das Setzen des zweiten SELECT in das temporäre, dann c_kilometers = c_kilometer + c_temporary tun? – jlrolin

Antwort

6

Vorausgesetzt, dass sowohl Ihre Anfragen immer genau eine Zeile zurückgeben, können Sie eine der folgenden Aktionen ausführen:

/* Variant 1 */ 


SELECT t.kilometers + g.kilometers 
INTO c_kilometers 
FROM table_name t, table_name2 g 
WHERE etc1 
     AND etc2 

/* Variant 2 */ 

SELECT t.kilometers 
INTO c_kilometers 
FROM table_name 
WHERE etc; 

SELECT c_kilometers + g.kilometers 
INTO c_kilometers 
FROM table_name2 
WHERE etc; 

Wenn sie in der gleichen Tabelle sind wie Sie auf dem Laufenden, können Sie verwenden:

SELECT COALESCE(SUM(kilometers), 0) 
INTO c_kilometers 
FROM table_name 
WHERE l.code IN (cursor_t.code_aff, cursor_t.code_att) 

Es scheint, dass es effizienter ist, table_name in Ihre SELECT Abfrage, die den Cursor erzeugt, zu setzen.

Wenn Sie diese Abfrage veröffentlichen, kann ich Ihnen wahrscheinlich dabei helfen.

+0

Es tut mir leid, ich habe die SELECTs falsch geschrieben. Sie befinden sich tatsächlich auf derselben Tabelle, verwenden jedoch unterschiedliche WHERE-Klauseln. – jlrolin

+0

Ich denke, dein zweites Skript funktioniert gut. Danke für die Antwort. – jlrolin

1

Join the SELECTs wie folgt aus: SELECT a.kilometers + b.kilometers FROM (SELECT code, kilometers FROM table_name WHERE ...) a JOIN (SELECT code, kilometers FROM table_name WHERE ...) b ON a.code = b.code

Verwandte Themen