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;

С помощью execute:T я получаю этот вывод

Я хотел бы сохранить SUM(длина) этого вывода в переменную в рамках той же процедуры.

Это возможно? Любая помощь?

заранее спасибо

3 ответа

Хорошо, теперь я понимаю, куда это идет. Поскольку вы хотите работать с таблицами различной формы, вы не сможете вообще избежать динамического SQL. Но поскольку вы всегда объединяете их в один столбец, вы можете просто сохранить эти преобразованные данные, скажем, во временной таблице, и запустить для этого SUM(LENGTH(()).

Однако не уверен, почему вы хотите выполнить это довольно болезненное упражнение, вместо того, чтобы просто экспортировать данные в какую-то папку и проверить полученный размер там.

Я изменил свой код: я пишу "вставить в таблицу SELECT " вместо "SELECT" в строке 8, и теперь я получаю данные в таблице

Я не совсем понимаю, почему вы используете динамический SQL здесь. С динамическим SQL (exec/execute немедленный) вы не получите доступ к набору результатов. В качестве альтернативы вы можете использовать курсоры. Вы можете предоставить параметры для SCHEMA_NAME и TABLE_NAME и таким образом быть "динамическими".

Я предполагаю, что этот вопрос связан с SAP HANA, получающим правильный размер данных CSV?

Другие вопросы по тегам