Ich arbeite an einer Anwendung, die eine dynamische Abfrage verwendet, um eine Select-Anweisung basierend auf Benutzereingaben auszuführen. Nachdem ich die Sicherheit mit DBAs besprochen habe, soll ich meine dynamische Select-Anweisung in eine gespeicherte Prozedur konvertieren.
Ich habe dynamisches SQL mit MSSQL erstellt, kann aber nicht herausfinden, wie es in Oracle SQL konvertiert werden kann.
CREATE PROCEDURE GetCustomer
@FirstN nvarchar(20) = NULL,
@LastN nvarchar(20) = NULL,
@CUserName nvarchar(10) = NULL,
@CID nvarchar(15) = NULL as
DECLARE @sql nvarchar(4000),
SELECT @sql = 'C_FirstName, C_LastName, C_UserName, C_UserID ' +
'FROM CUSTOMER ' +
'WHERE 1=1 ' +
IF @FirstN IS NOT NULL
SELECT @sql = @sql + ' AND C_FirstName like @FirstN '
IF @LastN IS NOT NULL
SELECT @sql = @sql + ' AND C_LastName like @LastN '
IF @CUserName IS NOT NULL
SELECT @sql = @sql + ' AND C_UserName like @CUserName '
IF @CID IS NOT NULL
SELECT @sql = @sql + ' AND C_UserID like @CID '
EXEC sp_executesql @sql, N'@C_FirstName nvarchar(20), @C_LastName nvarchar(20), @CUserName nvarchar(10), @CID nvarchar(15)',
@FirstN, @LastN, @CUserName, @CID
* Bitte beachten Sie, dass ich die SQL-Injection verhindern möchte. Ich möchte nicht nur einen String zusammenfügen
** Ich habe eine separate Klasse zum Erstellen dieser dynamischen Abfrage für meine Anwendung in .net erstellt. Ich habe fast 1000 Codezeilen, um alles zu verarbeiten und SQL-Injection zu verhindern, aber DBAs haben mir mitgeteilt, dass sie gespeicherte Prozeduren wünschen, damit sie Eingaben und steuern können Ausgabe.