2014-07-02 56 views
3

我似乎無法使用SAP HANA中的declare語句來獲取查詢。下面我將SQL轉換器的原始工作T-SQL版本和HANA版本輸出。我已經嘗試過幾個版本和組合,但是每次我都會收到您在下面也會發現的錯誤。任何人願意給我一個「如何」,所以我可以複製這個?我還闡述了SAP文檔,但沒有什麼可以幫助我。 您的幫助將不勝感激。將T-SQL Declare語句轉換爲SAP HANA

的T-SQL代碼:

DECLARE @NumAtCardDuplicate VARCHAR(50) 
SET @NumAtCardDuplicate = 
    (SELECT TOP 1 DocNum 
    FROM TEST_RSCA.OPCH 
    WHERE CardCode = 'S100424' 
    AND NumAtCard = '118 120 266 805') 

IF @NumAtCardDuplicate IS NOT NULL 
    SELECT 'Invoice number already used in entry ' + @NumAtCardDuplicate + '!' 
ELSE 
    SELECT '118 120 266 805' 

翻譯的HANA查詢:

NumAtCardDuplicate varchar(50); 

SELECT 
    (SELECT TOP 1 "DocNum" 
    FROM TEST_RSCA.OPCH 
    WHERE "CardCode" = 'S100424' 
    AND "NumAtCard" = '118 120 266 805') 
INTO NumAtCardDuplicate FROM DUMMY; 

temp_var_0 integer; 

SELECT :NumAtCardDuplicate INTO temp_var_0 FROM DUMMY; 

IF :temp_var_0 IS NOT NULL THEN 
    SELECT 'Invoice number already used in entry ' || :NumAtCardDuplicate || '!' 
    FROM DUMMY; 
ELSE 
    SELECT '118 120 266 805' 
FROM DUMMY; 
END IF; 

的錯誤,我得到:

持續時間7
Could not execute 'NumAtCardDuplicate varchar(50)' in 1 ms 989 µs . 
SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "NumAtCardDuplicate": line 1 col 1 (at pos 1) 

Could not execute 'SELECT (SELECT TOP 1 "DocNum" FROM TEST_RSCA.OPCH WHERE "CardCode" ='S100424' AND "NumAtCard" = ...' in 3 ms 578 µs . 
SAP DBTech JDBC: [337] (at 119): INTO clause not allowed for this SELECT statement: line 4 col 67 (at pos 119) 

Could not execute 'temp_var_0 integer' in 1 ms 701 µs . 
SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "temp_var_0": line 1 col 1 (at pos 1) 

Could not execute 'SELECT :NumAtCardDuplicate INTO temp_var_0 FROM DUMMY' in 1 ms 976 µs . 
SAP DBTech JDBC: [467]: cannot use parameter variable: NUMATCARDDUPLICATE: line 4294967295 col 4294967295 (at pos 4294967295) 

Could not execute 'IF :temp_var_0 IS NOT NULL THEN SELECT 'Invoice number already used in entry ' || ...' in 1 ms 560 µs . 
SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "IF": line 1 col 1 (at pos 1) 

Could not execute 'ELSE SELECT '118 120 266 805' FROM DUMMY' in 1 ms 338 µs . 
SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "ELSE": line 1 col 1 (at pos 1) 

    SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "END": line 1 col 1 (at pos 1) 

語句:13毫秒

回答

2

我創建了一個表OPCH作爲笑WN下方插入創建的過程與SQL腳本行

create column table "SYSTEM"."OPCH"("DOCNUM" VARCHAR (50) not null, 
    "CARDCODE" VARCHAR (7) null, 
    "NUMATCARD" VARCHAR (15) null, 
    primary key ("DOCNUM")) 

    insert into "SYSTEM"."OPCH" values('1','S100424','118 120 266 805'); 

如下圖所示

CREATE PROCEDURE SYSTEM.Z_CARDDUPLICATE LANGUAGE SQLSCRIPT 
    AS 
    BEGIN 

     declare NumAtCardDuplicate varchar2(50); 

     SELECT TOP 1 DocNum 
     INTO NumAtCardDuplicate 
     FROM SYSTEM.OPCH 
     WHERE CardCode = 'S100424' 
     AND NumAtCard = '118 120 266 805'; 

    IF :NumAtCardDuplicate IS NOT NULL THEN 
     SELECT 'Invoice number already used in entry ' || :NumAtCardDuplicate || '!' 
     FROM DUMMY; 
    ELSE 
     SELECT '118 120 266 805' 
     FROM DUMMY; 
    END IF; 

    End 

從SQL控制檯

CALL SYSTEM.Z_CARDDUPLICATE; 

它可以調用的過程。結果是「發票號碼已在條目1中使用!」

Statement 'CALL SYSTEM.Z_CARDDUPLICATE' 
    successfully executed in 132 ms 11 µs (server processing time: 29 ms 588 µs) 
    Fetched 1 row(s) in 0 ms 10 µs (server processing time: 0 ms 0 µs) 

讓我知道如果這不適合你。

+2

最明顯的區別是,你正在使用的程序,而OP可能沒有。有沒有辦法做到這一點,而不創建一個過程?爲什麼不支持變量和遊標的臨時查詢? –

-1

execute SQLScript on SQL Console,你不需要任何更多的其實創建過程

簡單地環繞你的SQL代碼之間DO BEGIN ... END;條款如下

do begin 

    declare NumAtCardDuplicate varchar(50); 

     SELECT TOP 1 DocNum 
     INTO NumAtCardDuplicate 
     FROM KODYAZ.OPCH 
     WHERE CardCode = 'S100424' 
     AND NumAtCard = '118 120 266 805'; 

    IF :NumAtCardDuplicate IS NOT NULL THEN 
     SELECT 'Invoice number already used in entry ' || :NumAtCardDuplicate || '!' 
     FROM DUMMY; 
    ELSE 
     SELECT '118 120 266 805' 
     FROM DUMMY; 
    END IF; 

end; 

請注意,我用同樣的代碼塊雷迪已建議使用