2016-08-01 19 views
1

Ich übergebe 3 Parameter in meine Hana Stored Procedure, um als WHERE-Klauseln zu verwenden, und wenn der Parameter null ist, möchte ich, dass die Prozedur sich so verhält, als ob t existieren.SQL: SAP Hana, wenn der Parameter null ist, ignoriere wo

Beispiel:

Wenn einer der Eingangsparameter ist device.

SELECT TOP 5 DISTINCT USERS FROM MYTABLE 
WHERE USERDEVICE = deviceType; 

wenn Device null, Abfrage sollte einfach

SELECT TOP 5 DISTINCT USERS FROM MYTABLE. 

sein Ich weiß, dass ich dies, wenn Aussagen erreichen kann, aber ist es eine andere Möglichkeit, es zu tun?

+1

Dies wird normalerweise mit dynamischem SQL durchgeführt (nicht zu empfehlen für zeitkritische Abfragen und/oder sehr häufige Ausführung). Sie erstellen Ihre Abfrage als String (einschließlich der Bedingungen, wenn die Parameter übergeben werden) und führen sie dann aus (überprüfen Sie die genaue Syntax meines MS-SQL). – FDavidov

Antwort

1

Wenn SQLScript verwenden, können Sie die APPLY_FILTER() Funktion verwenden.

z.

drop procedure getTopUsers; 
create procedure getTopUsers (IN filter_cond NVARCHAR(200)) as 
begin 

    vUsers = SELECT DISTINCT user_name, creator FROM USERS; 

    if (:filter_cond is NULL) then 
    TopUsers = select TOP 5 user_name FROM :vUsers; 
    else 
    tTopUsers = APPLY_FILTER(:vUsers, :filter_cond); 
    TopUsers = SELECT TOP 5 user_name FROM :tTopUsers; 
    end if; 

    SELECT user_name FROM :TopUsers; 
end; 



call getTopUsers ('CREATOR != ''SYS'' '); 
call getTopUsers (NULL); 
-1
DECLARE @deviceType VARCHAR(100) 
DECLARE @SQL VARCHAR(256) 
    ,@sql1 VARCHAR(256) = 'WHERE USERDEVICE = ''' + @deviceType + '''' 

SET @SQL = 'SELECT TOP 5 DISTINCT USERS FROM MYTABLE' 
SET @SQL = CASE 
     WHEN @deviceType IS NULL 
      THEN @SQL 
     ELSE @SQL + ' ' + @sql1 
     END 

EXEC (@SQL) 
+0

Ich habe dem Parameter @deviceType keinen Wert zugewiesen. Der Standardwert ist null. Wenn Sie also mit dem Wert überprüfen möchten, können Sie den Wert – brahmareddy

+1

zuweisen. Dies ist die T-SQL-Syntax für MS SQL Server und nicht für SAP HANA –

0

Grundsätzlich ist die Anforderung nicht jede Bedingung deviceType IS NULL ist anzuwenden. Anstatt die Abfrage dynamisch zu verändern, können Sie nur eine Bedingung erstellen, die immer true zurück, in einer solchen Situation durch die logische or Operator:

SELECT TOP 5 DISTINCT USERS 
FROM MYTABLE 
WHERE deviceType IS NULL OR USERDEVICE = deviceType;