« Sicherheit: MD5 Hash decodieren / entschlüsseln (16 stelligen Hash) | Startseite | mySQL: Alte MD5 Passwörter – OLD_PASSWORD() »
Oracle: Stored Procedures mit dynamischen SQL Befehlen
admin | 07.07.2009
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
Kategorie: Anleitungen, Oracle | Keine Kommentare »