0

我是 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) 存储到同一过程中的变量中。

那可能吗 ?有什么帮助吗?

提前致谢

4

3 回答 3

1

好的,现在我明白了,这是怎么回事。由于您想使用不同形状的表,因此您将无法完全避免使用动态 SQL。但是由于您总是将其融合到单个列中,因此您可以简单地将转换后的数据存储到一个临时表中,然后在其上运行 SUM(LENGTH(())。

不知道为什么要进行这个相当痛苦的练习,而不是简单地将数据导出到某个文件夹并在那里检查结果大小。

于 2016-12-14T06:54:36.600 回答
0

我修改了我的代码:我在第 8 行写了“insert into Table SELECT”而不是“SELECT”,现在我在表中获取数据

于 2016-12-14T15:36:14.907 回答
0

我不太明白你为什么在这里使用动态 SQL。使用动态 SQL(立即执行/执行),您无法访问结果集。或者,您可以使用游标。您可以为 SCHEMA_NAME 和 TABLE_NAME 提供参数并以这种方式“动态”。

我想这个问题与SAP HANA 获取 csv 数据大小有关吗?

于 2016-12-12T20:35:50.143 回答