2017-10-26 5 views
0

Mein Problem ist, dass ich versuche, eine SELECT-Anweisung zu erstellen, die von der Anzahl der Variablen abhängt, die ich an sie übergeben werde.Dynamische SQL-Anweisung - abhängig von der Anzahl der Variablen

Wichtig zu wissen, dass ich Oracle-Datenbank verwenden.

Gibt es eine effiziente Möglichkeit, eine solche Aussage zu erstellen?

zum Beispiel Ich habe drei varaibles (Verbunde mit „AND‘ Keyword), die ich in der Datenbank übergeben kann und es soll mir ein eindeutiges Ergebnis geben opt1 -. (WO var1 = x UND var2 = y UND var3 = z)

Aber auch gibt es eine Option, dass ich nur zwei varaibles passieren und erhalten Ergebnisse opt. 2 - WHERE = x uND var2 = y) einer Variablen oder keine und bekommen jeden Datensatz aus der Datenbank var1

Ich möchte nicht unzählige Anzahl von verschiedenen Select-Anweisung zu bauen . Es muss einen Weg geben, dies elegant zu machen.

PS. Dies ist ein Problem, das mit dem JDBC-Adapter von webmethods verbunden ist. Vielleicht weiß jemand, wie man das in dieser Umgebung löst?

+0

Sie benötigen ein Array und durchlaufen sie passieren. Sehen Sie sich die Datenstruktur von owa_util.ident_arr in oracle an. Überstreiche es von 1..length des Arrays und baue das sql auf, dann führe es aus. Im Array speichern 'col1 = x', 'col2 = y' usw. –

+0

Gibt es eine einfachere Möglichkeit, dies zu tun? Ich habe Angst, ich möchte Variablen in meiner Webmethods-Umgebung in Array-Form übergeben können. vielleicht gibt es eine Option zum Beispiel: zu prüfen, ist die Variable null und implementiert entsprechende Logik dann? – czarnyMati

+0

Überprüfen Sie die Dokumentation von Webmethoden, normalerweise würde ich erwarten, dass es irgendeine Art von Array-Parametern unterstützt. –

Antwort

1

Sie können ein zugeordnetes Array verwenden, um die Elemente zu speichern und abzurufen. Hier habe ich Ihnen gezeigt, die Abfrage zu konstruieren. Sie können eine cursor oder andere Optionen verwenden, um es auszuführen. Sie können dies als Prozedur erweitern, um das Array von Variablen als Argument zu übergeben. SiehePassing an associative array as a parameter between packages für eine solche Implementierung.

SET SERVEROUTPUT ON; 
DECLARE 
TYPE where_elems 
IS 
    TABLE OF VARCHAR2 (100) INDEX BY VARCHAR2 (30); 
    wh where_elems; 
    v_query VARCHAR2 (4000) := 'SELECT col , col2 FROM yourtable where 1=1 '; 
    v_idx VARCHAR2 (30); 
BEGIN 
    wh ('col3') := 'value3'; --you can initialize and call a procedure with array as argument. 
    wh ('col4') := 'value4'; 
    v_idx  := wh.FIRST; 

    WHILE (v_idx IS NOT NULL) 
    LOOP 
    v_query := v_query || ' AND ' || v_idx || ' = ' || wh (v_idx); 
    v_idx := wh.NEXT (v_idx); 
    END LOOP; 
    DBMS_OUTPUT.PUT_LINE (v_query); 
END; 
/

Ausgabe

SELECT col , col2 FROM yourtable where 1=1 AND col3 = value3 AND col4 = value4 
Verwandte Themen