Execute immediate select-Anweisung in Oracle

Ich bin mit execute immediate-Anweisung in einer meiner Abfragen.

    procedure p1 (p_pk1_column, p_pk2_column , p_conv_table_name ,p_MODUE_NAME )
    is
    v_select_string   := 'SELECT'''||p_MODUE_NAME||''',''' ||p_pk1_column || ''',''' || p_pk2_column ||''' FROM ' ||p_conv_table_name || v_where_condition;
    execute immediate v_select_string  ;
    dbms_output.put_line('string:'||v_select_string  );
    end p1;

Hier bin ich ruft p1 Prozedur in einer anderen Prozedur p2

PROCEDURE P2 IS
v_pk1_column:='a';
v_pk2_columnm:='b';
v_mod_name:='mOD1';
p1(v_pk1_column,v_pk2_columnm);
end p2;
/

In p2-Prozedur a, b sind die Namen der Spalten p_conv_table_name . Ich möchte die select-Anweisung ausgeführt: select p_mod_name, a, b aus p_conv_table_name where-Bedingung, so dass Sie sollten geben Sie Werte für a-und b-Säulen in p_conv_table_name .

Aber es ist die Ausführung wie wählen Sie p_mod, p_pk1_col,p_pk2_col von p_conv_table_name where-Bedingung;

So einfach die Spaltennamen auswählen, wird statt der Werte in dieser Spalte.

Bitte deuten einige Konzept zur Verwirklichung von Werten in dieser Spalte.

Vielen Dank im Voraus

  • sieht aus wie zu viele einfache Anführungszeichen zu mir? Anstelle von "WÄHLEN Sie a, b," etc. Sie werden beim ausführen von "SELECT 'a', 'b'," etc.
  • Prüfen Sie einfach, Skript-Ausgabe und finden Sie, dass es wie SELECT'z','zz','zzz' FROM zzzz. Und es ist eine gute Praxis zu liefern, eine Frage mit syntaktisch korrekte Beispiele
  • Warum wollen Sie nicht, weder DBMS_SQL-Paket noch bind-Variablen? Es ist möglich, eine SQL injection beim erstellen der dynamischen Abfrage wie diese, die DBMS_SQL - und bind-Variablen helfen Sie zu vermeiden.
  • Als Abgang;, wenn Sie die Ausführung einer SELECT-Anweisung müssen Sie IN etwas...
InformationsquelleAutor user3869208 | 2014-07-28
Schreibe einen Kommentar