Oracle: Stored Procedures mit dynamischen SQL Befehlen

Um innerhalb einer "Stored Procedure" oder "Function" in Oracle Parameter in eine SQL Abfrage einzubauen, können Sie folgendes Beispiel als Vorlage nutzen:

CREATE OR REPLACE PROCEDURE SP_TESTS (in_condition IN VARCHAR2)
IS
  ret_value number;
  Ssql varchar2(4000);
BEGIN
  DBMS_OUTPUT.PUT_LINE('Start ...');

  -- Prüfen, ob eine Bedingung übergeben wurde
  -- Fall nicht, where mit "1=1" ergänzen lassen
  if (in_condition is null OR LENGTH(in_condition) = 0) then
    condition := ' 1=1 ';
  else
    condition := in_condition;
  end if;

  -- SQL Query zusammensetzen
  Ssql := 'SELECT id FROM demo WHERE ' || condition || ' ORDER by 1';

  -- SQL Query anzeigen
  DBMS_OUTPUT.PUT_LINE('SQL Query: ' || Ssql);

  -- Den zusammengebauten SQL Befehl ausführen lassen 
  execute immediate Ssql into ret_value;

  -- Ergebnis anzeigen
  DBMS_OUTPUT.PUT_LINE('Ergebnis: ' || ret_value|| '%');
END;
Das Script erkennt nach dem Start automatisch, ob eine WHERE Bedingung als Parameter übergeben wurde. Fehlt diese, würde der fehlerhaft SQL so aussehen:
SELECT id FROM demo WHERE ORDER by 1
Dadurch würde ein Fehler ausgelöst werden. Durch die Ergänzung mit "1 = 1" wird der SQL Befehl wieder gültig und kann fehlerfrei ausgefürt werden:
SELECT id FROM demo WHERE 1 = 1 ORDER by 1