我是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;
我想将此输出的SUM(长度)存储到同一过程中的变量中。
这可能吗?有帮助吗?
提前致谢
答案 0 :(得分:1)
好的,现在我明白了,这是怎么回事。 由于您希望使用不同形状的表,因此您将无法完全避免使用动态SQL。 但是因为你总是将它融合到一个列中,你可以简单地将转换后的数据存储到临时表中,并在其上运行SUM(LENGTH(())。
不确定为什么你想要经历这个相当痛苦的练习,而不是简单地将数据导出到某个文件夹并检查结果大小。
答案 1 :(得分:0)
我不明白为什么你在这里使用动态SQL。使用动态SQL(exec / execute immediate),您无法访问结果集。 或者,您可以使用游标。 您可以为SCHEMA_NAME和TABLE_NAME提供参数,并且是“动态的”#39;那样。
我猜这个问题与SAP HANA getting csv data size对吗?
答案 2 :(得分:0)
我修改了我的代码: 我在第8行写“insert into Table SELECT”而不是“SELECT” 现在我得到表格中的数据