Изменчивая таблица в хранимой процедуре - Teradata - PullRequest
0 голосов
/ 17 декабря 2018

Я создаю хранимую процедуру следующим образом:

replace PROCEDURE mydb.sp_Insert_Values ( 
   IN  lastExecDate timestamp 
) 
SQL SECURITY CREATOR 
BEGIN 

CREATE MULTISET VOLATILE TABLE vt_ref_table_1
(
    Ref_Id integer,
    Ref_Unit_Type varchar(50)
) ON COMMIT PRESERVE ROWS;

insert into mydb.vt_ref_table_1
select Ref_Id, Ref_Unit_Type
from mydb.ref_table_1;  

INSERT INTO mydb.Time_Series_Table
select
  t1.TD_TIMECODE
, t1.Time_Series_Meas
, t1.Time_Series_Curve_Type_CD 
, t1.Ref_Unit_Type
, t1.Ref_Id 
, t1.created_on
from
        (
            select 
            meas_ts as TD_TIMECODE 
            , ref_table_1.Ref_Id as  Ref_Id
            , meas as Time_Series_Meas,
            , Time_Series_Curve_Type_CD
            , Ref_Unit_Type
            , current_timestamp as created_on
            from mydb_stg.Time_Series_Table_Stg as stg
            left join mydb.ref_table_1 as ref_table_1
            on ref_table_1.Ref_Id = stg.Ref_Id
            where stg.created_on >= :lastExecDate
        ) as t1
        left join mydb.Time_Series_Table as t2
        on t1.TD_TIMECODE=t2.TD_TIMECODE
        and t1.Time_Series_Curve_Type_CD = t2.Time_Series_Curve_Type_CD
        and t1.Ref_Id=t2.Ref_Id
        where t2.Ref_Id is null
;   
END;

Она компилируется, но когда я ее вызываю, выдается эта ошибка:

Допустима только инструкция COMMIT WORK или null.после инструкции DDL.

Я знаю, что ошибка связана с изменяемой таблицей, но я не знаю, как ее исправить.

Почему мне нужна изменяемая таблица:

Справочная таблица имеет ограничение безопасности на уровне строк.Если я использую его напрямую, я получаю еще одну ошибку:

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

Версия Teradata: 16.20

Режим: ANSI

...