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?