create or replace procedure proc
as
begin
declare
time_to_stay number(3):=90
with date_partitions as
(select dbms_xmlgen.getxmltype('
select p.table_owner,
p.table_name,
p.high_value
from all_part_key_columns k,
all_tab_cols c,
all_tab_partitions p
where k.owner = c.owner
and k.column_name = c.column_name
and k.name = c.table_name
and k.owner = p.table_owner
and k.name = p.table_name
and (c.data_type = ''DATE'' or
c.data_type like ''TIMESTAMP%'')')
as xml
from dual)
SELECT x.*
FROM date_partitions p,
xmltable('/ROWSET/ROW'
passing p.xml
columns table_owner varchar2(30)
path '/ROW/TABLE_OWNER',
table_name varchar2(30)
path '/ROW/TABLE_NAME',
high_value varchar2(30)
path '/ROW/HIGH_VALUE'
) x
where to_date(substr(x.high_value,
instr(high_value, '''')+2,
19),
'yyyy-mm-dd hh24:mi:ss') <= sysdate-time_to_stay
end;
コードを実行すると、プロシージャが作成されます。しかし、動作しません。プロシージャをコンパイルしようとすると、次のエラーが発生します。エラー(7,1): PLS-00103: 次のいずれかを予期しているときに、シンボル「WITH」が見つかりました: * & = - + ; </ > at in is mod 残り not rem <> または != または ~= >= <= <> and or like like2 like4 likec between || multiset メンバー submultiset ...
このコードを begin セクションで実行すると、問題なく動作します。