簡體   English   中英

SAP HANA執行過程中生成的查詢

[英]SAP HANA execute query generated within a procedure

我是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我得到這個輸出 在此處輸入圖片說明

我想將此輸出的SUM(length)存儲到同一過程中的變量中。

那可能嗎 ? 有什么幫助嗎?

提前致謝

好吧,現在我明白了,這是怎么回事。 當您要使用不同形狀的表時,將無法完全避免使用動態SQL。 但是,由於您始終將其分解為一列,因此可以簡單地將轉換后的數據存儲到一個臨時表中,然后在該表上運行SUM(LENGTH(())。

不知道為什么要經歷這個相當痛苦的練習,而不是簡單地將數據導出到某個文件夾中並在此檢查結果大小。

我不太明白為什么在這里使用動態SQL。 使用動態SQL(立即執行/執行),您將無法訪問結果集。 或者,您可以使用光標。 您可以為SCHEMA_NAME和TABLE_NAME提供參數,並以這種方式“動態”。

我想這個問題與SAP HANA獲取csv數據大小正確有關嗎?

我修改了代碼:在第8行中寫入“插入表SELECT”而不是“ SELECT”,現在我在表中獲取數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM