1

WHERE句として使用する 3 つのパラメーターを Hana ストアド プロシージャに渡しています。パラメーターが の場合、nullその条件が存在しないかのようにプロシージャが動作するようにします。

例:

入力パラメータの 1 つがdeviceType.

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

deviceType が null の場合、クエリは単に

SELECT TOP 5 DISTINCT USERS FROM MYTABLE.

if ステートメントでこれを達成できることはわかっていますが、それを行う別の方法はありますか?

4

3 に答える 3

2

基本的には条件を当てはめないことが条件ですdeviceType IS NULLorクエリを動的に変更する代わりに、論理演算子を使用して、そのような状況で常に true を返す条件を構築できます。

SELECT TOP 5 DISTINCT USERS 
FROM   MYTABLE
WHERE  deviceType IS NULL OR USERDEVICE = deviceType;
于 2016-08-01T06:12:11.170 に答える
1

SQLScript を使用する場合、APPLY_FILTER() 関数を使用できます。

例えば

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);
于 2016-08-01T06:13:06.923 に答える
-2
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)
于 2016-08-01T06:01:59.077 に答える