2016-12-12 5 views
0

SAP HANAの新機能です。クエリを生成してストアドプロシージャ内で実行しようとしています。SAP 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(長さ)を保存したいと思い、この出力 enter image description here

を取得します。

これは可能ですか?どんな助け?

ありがとうございました

答えて

0

ここでは、動的SQLを使用する理由がわかりません。動的SQL(exec/execute immediate)では、結果セットにアクセスできません。 カーソルを使用することもできます。 SCHEMA_NAMEとTABLE_NAMEのパラメータを指定することができ、そのように '動的'にすることができます。

この質問はSAP HANA getting csv data sizeと関係がありますか?

+0

こんにちは、 あなたの返信ありがとう、はい私はタブを与えるSQLを生成しようとしたい私は3つの例をして、私は良い結果を得ました、ちょうどcsvデータのサイズと同じです。 私を助けてもらえますか?私が実行するとき:T私はcsvテーブルを取得します。私は本当に動的SQLを必要としません、私は変数の出力を取得する必要があります。合計(長さ)を作る。ありがとう –

+0

私は多分DECLARE CURSOR c_products FOR:T?を書くことができますか? –

1

これはどこにあるのかわかりました。 異なる形状の表で作業したいので、動的SQLを完全に避けることはできません。 しかし、あなたはいつもそれを単一の列に溶かしているので、その変換されたデータをテンポラリテーブルに保存してSUM(LENGTH(())を実行することができます。

+0

実際に私たちのクライアントはエクスポート前にcsvのサイズを知りたいと思っています。 はい、私はその変換されたデータをテーブルに格納することができますか?私は即座に実行すると、プロシージャのデータalsの出力を取得するが、私はテーブルにそれを格納することはできません 私はテーブルに挿入を試みた(実行...)も動作しません:( –

0

私は自分のコードを変更しました: 8行目の「SELECT」に「insert into table」と書いています。 と「いいえ」と書かれています。今すぐテーブルのデータを取得する

関連する問題