Я создаю хранимую процедуру следующим образом:
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