2016-12-12 54 views
0

我是SAP HANA的新手,我試圖在存儲過程中生成一個查詢並執行它。在一個過程中生成的SAP HANA執行查詢

我得到一個錯誤,我不確定HANA可以做那樣的事情。

這裏我的代碼

CREATE PROCEDURE "PROCEDURE_IBA_TESTCSV"(
      IN SCHEMA_NAME VARCHAR(100)) 
LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS 
BEGIN 
DECLARE T VARCHAR(1000); 
DECLARE TA VARCHAR(1000); 
SELECT 
    ' SELECT ' || MAX(C_1) || IFNULL(MAX(C_2),'')|| IFNULL(MAX(C_3),'') ||' AS STATEMENT FROM ' || SCHEMA_NAME || '.' || TABLE_NAME || ' ' INTO T 
FROM ( 
SELECT POSITION, DATA_TYPE_ID, COLUMN_NAME ,SCHEMA_NAME, TABLE_NAME , 
CASE WHEN POSITION = 1 THEN   
' CASE WHEN ('|| COLUMN_NAME ||' IS NULL) THEN '''' ELSE REPLACE(TO_CHAR(' || COLUMN_NAME || '),''.'','','') END' END AS C_1, 

CASE WHEN POSITION = 2 THEN '||''#''|| CASE WHEN ('|| COLUMN_NAME ||' IS NULL) THEN '''' ELSE TO_NVARCHAR('||COLUMN_NAME||') END' END AS C_2, 
CASE WHEN POSITION = 3 THEN '||''#''|| CASE WHEN ('|| COLUMN_NAME ||' IS NULL) THEN '''' ELSE TO_NVARCHAR('||COLUMN_NAME||') END' END AS C_3 
    FROM ( 
select SCALE,SCHEMA_NAME,position,TABLE_NAME,column_name, data_type_id from TABLE_COLUMNS where 
    schema_name ='IMPORT_KT_STAMM_IK_348BA_20160706' AND TABLE_NAME='CLS_220_KTHISTORIE')) group by SCHEMA_NAME,TABLE_NAME; 

execute immediate :T ; 

INSERT INTO Test SELECT :T from DUMMY; 

END; 

隨着執行:T I得到如下的輸出 enter image description here

我想此輸出的SUM(長度)存儲到相同的過程中的變量。

這可能嗎?任何幫助?

在此先感謝

回答

0

我不明白爲什麼你在這裏使用動態SQL。使用動態SQL(exec/execute immediate),您無法訪問結果集。 或者,您可以使用遊標。 您可以爲SCHEMA_NAME和TABLE_NAME提供參數,並以這種方式爲'動態'。

我想這個問題與SAP HANA getting csv data size有關嗎?

+0

你好拉爾斯, 謝謝你的回覆,是的,正好我想嘗試生成sql,給我一個選項卡與csv數據,然後我做這個表的長度的總和,我做了3個例子,我得到了一個很好的結果,完全像csv數據的大小。 你能幫我嗎?當我做了執行:我得到了csv表。我並不需要動態SQL,我只需要將T的輸出轉換爲一個變量並進行求和(長度)即可。謝謝 –

+0

我可以寫DECLARE CURSOR c_products FOR:T? –

1

好吧,現在我明白了,這是怎麼回事。 正如你想處理不同形狀的表格一樣,你將無法完全避免動態SQL。 但是,由於您總是將其融合到一個列中,因此您可以簡單地將該轉換後的數據存儲到臨時表中,然後運行SUM(長度(())。

不確定您爲什麼想要。經過這相當痛苦的練習,而不是簡單地將數據導出到某個文件夾並檢查所產生的大小有

+0

其實我們的客戶想在出口之前知道csv的大小。 是的問題是我可以將轉換後的數據存儲到表中。當我使用立即執行我得到的程序的數據ALS輸出,但我不能存儲在表 我試圖插入表(執行...)不工作太:( –

0

我修改了代碼: 我寫的「插入表中選擇」看齊,而不是「選擇」 8 和現在我得到的數據表