Oracle-sql - gespeicherten Prozeduren concat-Funktion eine variable in einen string
Ich habe eine gespeicherte Prozedur von dieser Art
create or replace
PROCEDURE AAA
(
p_BBB IN VARCHAR,
...
)
AS
T_QUERY varchar2(3000);
BEGIN
OPEN A_CUR FOR SELECT ... BBB like '%' || p_BBB || '%';
T_QUERY := 'SELECT BBB like %'|| p_BBB ||'% ';
END AAA;
Das problem ist, dass, während die erste Abfrage wird korrekt verarbeitet, das concat zwischen den Saiten in T_QUERY
gibt mir Fehler (ungültiges Zeichen).
Weder mit concat()
Werke, die T_QUERY
wird übergeben, um eine andere gespeicherte Prozedur, die die Abfrage ausführt.
Kann mir jemand helfen??
'Wählen Sie" bb-like '%Daten%" - dieser string macht keinen Sinn. Sie sind fehlende 'from sometable where somecolumn wie ...' Teil.
InformationsquelleAutor user1683737 | 2012-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie versuchen,
Also, was ist die beste Möglichkeit zur Vermeidung von SQL-injection in diesem Fall?
Der beste Weg wäre, um zu übergeben, die die Abfrage und die parameter separat zu nutzen und gebundene Parameter bei der Ausführung (EXECUTE IMMEDIATE p_query MIT p_param). Neben der Ausführungsplan wird zwischengespeichert werden, dass Art und Weise. Wenn ein einzelner query-string unvermeidbar ist, ersetzen Sie alle einfachen Anführungszeichen wird durch zwei einfache Anführungszeichen, setzen Sie ein einfaches Anführungszeichen am Anfang und am Ende und führen Sie es durch DBMS_Assert.Enquote_Literal. Und Lesen und befolgen Sie Wie Schreibe Injektion Beweis PL/SQL.
InformationsquelleAutor Raphaël Althaus
Obige Lösung die richtige ist.
Verwenden Sie es wie dieses.
InformationsquelleAutor Vishnu Gupta