嘿,我在使用PL / SQL程序创建分区时遇到问题:
ORA-14019:分区绑定元素必须是以下之一:string,datetime或 interval literal,number或MAXVALUE
似乎问题是属性r.partition_date的格式,我已经运行了一些测试脚本并尝试了不同的日期格式,但没有任何帮助。
列partition_date的格式:2017-09-01
我正在运行此程序:
declare
v_new_part varchar2(30);
v_prev_part varchar2(30);
v_sql varchar2(4000);
v_table varchar(30) := 'RL2_OUTDW_CORP_PRISK_REV_B';
begin
for r in (select distinct a.partition_date , a.partition_name from XX a
where a.PARTITION_NAME = 'PARTITION_20170831'
order by 1)
loop
v_sql := 'alter table ' || v_table || ' SPLIT PARTITION
PARTITION_30000101
at (''N'',to_date(' || r.partition_date || ',''yyyy.mm.dd''))
into (partition ' || r.partition_name || ' ,partition
PARTITION_30000101)';
execute immediate v_sql;
end loop;
end;
/
即使这个有效:
declare
v_new_part varchar2(30);
v_prev_part varchar2(30);
v_sql varchar2(4000);
v_table varchar(30) := 'RL2_OUTDW_CORP_PRISK_REV_B';
begin
for r in (select distinct a.partition_date , a.partition_name from XX a
where rownum = '1'
order by 1)
loop
v_sql := 'alter table ' || v_table || ' SPLIT PARTITION
PARTITION_30000101
at ("N",to_date(''2017-01-29'',''yyyy.mm.dd''))
into (partition ' || 'PARTITION_20170129' || ' ,partition
PARTITION_30000101)';
execute immediate v_sql;
end loop;
end;
/
感谢您的建议。
答案 0 :(得分:0)
首先删除此
中的星号 (''N'',to_date(' || **r.partition_date** || ',''yyyy.mm.dd''))
第一句话的一部分。
并在光标中格式化
for r in(select distinct
to_char(a.partition_date,'yyyy.mm.dd')
par_date,a.partition_name来自XX a,其中rownum =' 1'订购1)
并添加两个引号:
('' N'',to_date('
''
|| r.par_date ||''
',& #39;'为yyyy.mm.dd''))
SQL>set serveroutput on;
SQL> declare
v_new_part varchar2(30);
v_prev_part varchar2(30);
v_sql varchar2(4000);
v_table varchar(30) := 'RL2_OUTDW_CORP_PRISK_REV_B';
begin
for r in (select distinct to_char(a.partition_date,'yyyy.mm.dd') par_date , a.partition_name from XX a
where a.PARTITION_NAME = 'PARTITION_20170831'
order by 1)
loop
v_sql := 'alter table ' || v_table || ' SPLIT PARTITION
PARTITION_30000101
at (''N'',to_date('''|| r.par_date || ''',''yyyy.mm.dd''))
into (partition ' || r.partition_name || ' ,partition
PARTITION_30000101)';
dbms_output.put_line(v_sql);
execute immediate v_sql;
end loop;
end;
/
答案 1 :(得分:0)
我不明白"N"
的目的,但我认为应该是这样:
v_sql := 'alter table ' || v_table || ' SPLIT PARTITION
PARTITION_30000101
at (DATE '''||TO_CHAR(r.partition_date,'yyyy-mm-dd')||''')
into (partition ' || r.partition_name || ' ,partition
PARTITION_30000101)';
注意,当您使用DATE
字面值时,格式固定为YYYY-MM-DD
,否则请使用
at (TO_DATE('''|| TO_CHAR(r.partition_date,'dd.mm.yyyy') ||''', ''dd.mm.yyyy'')`