2016-03-30 12 views
0

Ich möchte ein zusätzliches WHERE -Parameter anwenden, wenn ein bestimmter Wert angegeben wird. Wir arbeiten gerade an SAP-Hana, aber wir sind möglicherweise in der Lage, strikte Stored-Procedure-Programmierung an diese Plattform anzupassen. jede Hilfe wird sehr geschätzt! Also hier ist der Code:Bedingte WHERE-Klausel bei gespeicherten Prozeduren

PROCEDURE test (
    IN id integer, 
    IN testVal VARCHAR(20) DEFAULT '*', 
    out ex_return DB-SCHEME  
) 
LANGUAGE SQLSCRIPT 
SQL SECURITY INVOKER 
--DEFAULT SCHEMA <default_schema_name> 
READS SQL DATA AS 
BEGIN 

ex_return = 
    SELECT 
     L."ID", 
     LW."ID" 
    FROM DB1 L 
     INNER JOIN DB2 LW 
      ON L."id" = LW."id" 
    WHERE 
      L."id" = :id 
     AND LW."testVal" LIKE :testVal  -- this one only, if :testVal != '*' 
; 

END 

Was habe ich schon ausprobiert? Ich versuchte CONCAT die SELECT mit einer berechneten WHERE (IF -Conditions) und dann die EXECUTE -Command, aber es scheint, wie SAP HANA das nicht unterstützt. Dann habe ich versucht mit CASE innerhalb des WHERE -Claus die Anforderungen entsprechen: WHERE ... CASE :wert <> '*' THEN ... END

+1

Haben Sie darüber nachgedacht '... AND (LW "testval" LIKE. Testval OR: testval =‚* ")" –

Antwort

1
AND (LW."testVal" LIKE :testVal OR :testVal = '*') 
0

Warum genau können Sie nicht verwenden, um die APPLY_FILTER Funktion?

PROCEDURE test (
    IN id integer, 
    IN testVal VARCHAR(20) DEFAULT '', 
    out ex_return DB-SCHEME  
) 
LANGUAGE SQLSCRIPT 
SQL SECURITY INVOKER 
--DEFAULT SCHEMA <default_schema_name> 
READS SQL DATA AS 
BEGIN 

ex_return = 
    SELECT 
     L."ID", 
     LW."ID" 
    FROM DB1 L 
     INNER JOIN DB2 LW 
      ON L."id" = LW."id" 
    WHERE 
      L."id" = :id; 

ex_filtered = APPLY_FILTER (:ex_return, :testVal); 

END; 

In der Variablen testVal können Sie jetzt die gesamte Bedingung, z.

call test (1, ' "testVal" like ''%ABC%'' '); 

, dass alle in der Dokumentation enthalten ist http://help.sap.com/saphelp_hanaplatform/helpdata/en/a0/9d584807f84477a64d7625ca45b089/content.htm?frameset=/en/a9/4461d71e8145a78d990deac4823858/frameset.htm&current_toc=/en/ed/4f384562ce4861b48e22a8be3171e5/plain.htm&node_id=73

  • Lars