错误:ORA-14155:缺少PARTITION,PARTITIONS,SUBPARTITION或SUBPARTITIONS关键字(Error : ORA-14155: missing PARTITION, PARTITIONS, SUBPARTITION, or SUBPARTITIONS keyword)
我试图在Oracle中动态重命名列。
我有一个表的列名是月份名称,每个月我需要刷新数据并相应地更改列名称。
DECLARE
v_cur_month_name VARCHAR2(100);
i INT := 0;
vsql VARCHAR2(250);
BEGIN
FOR my_tab IN (WITH month_counter AS
(SELECT column_name, rownum AS cnt
FROM all_tab_columns
WHERE lower(owner) = 'ppl'
AND lower(table_name) = 'test')
SELECT column_name AS MONTH, cnt FROM month_counter WHERE rownum <= 12) LOOP
v_cur_month_name := to_char(to_date(extract(MONTH FROM to_date(to_char(add_months(SYSDATE, i), 'YYYY-MM-DD'), 'YYYY-MM-DD')), 'MM'), 'MONTH');
vsql := 'alter table ppl.test rename column' || my_tab.month || 'TO' || v_cur_month_name;
EXECUTE IMMEDIATE vsql;
i := i + 1;
END LOOP;
END;
对于这个:我得到错误:
ORA-14155:缺少PARTITION,PARTITIONS,SUBPARTITION或SUBPARTITIONS关键字
ORA-06512:在第20行
I m trying to rename columns dynamically in Oracle.
I have a table whose column is named on month names, every month I need to refresh the data and change column names accordingly.
DECLARE
v_cur_month_name VARCHAR2(100);
i INT := 0;
vsql VARCHAR2(250);
BEGIN
FOR my_tab IN (WITH month_counter AS
(SELECT column_name, rownum AS cnt
FROM all_tab_columns
WHERE lower(owner) = 'ppl'
AND lower(table_name) = 'test')
SELECT column_name AS MONTH, cnt FROM month_counter WHERE rownum <= 12) LOOP
v_cur_month_name := to_char(to_date(extract(MONTH FROM to_date(to_char(add_months(SYSDATE, i), 'YYYY-MM-DD'), 'YYYY-MM-DD')), 'MM'), 'MONTH');
vsql := 'alter table ppl.test rename column' || my_tab.month || 'TO' || v_cur_month_name;
EXECUTE IMMEDIATE vsql;
i := i + 1;
END LOOP;
END;
For this: i am getting error as:
ORA-14155: missing PARTITION, PARTITIONS, SUBPARTITION, or SUBPARTITIONS keyword
ORA-06512: at line 20
原文:https://stackoverflow.com/questions/47054216
更新时间:2020-01-26 22:20
最满意答案
您需要添加空格以获取正确的语法:
vsql := 'alter table ppl.test rename column' || my_tab.month || 'TO' || v_cur_month_name;
=>
vsql := 'alter table ppl.test rename column ' || my_tab.month || ' TO ' || v_cur_month_name;
无论如何,动态列重命名表示设计不佳。
You need to add spaces to get correct syntax:
vsql := 'alter table ppl.test rename column' || my_tab.month || 'TO' || v_cur_month_name;
=>
vsql := 'alter table ppl.test rename column ' || my_tab.month || ' TO ' || v_cur_month_name;
Anyway dynamic column rename indicates poor design.
2017-11-01
相关问答
我仍然不明白你为什么要移动分区,无论如何我有一个解决方案。 首先,你可以解决一个分区 SELECT COUNT(*) FROM PROVA_LOG PARTITION (SYS_P7138);
或者你可以这样做 SELECT COUNT(*) FROM PROVA_LOG PARTITION FOR (TO_DATE('2016-10-01', 'YYYY-MM-DD'));
或者如果你喜欢DATE文字 SELECT COUNT(*) FROM PROVA_LOG PARTITION FOR
...
当您正在进行分区交换时,您正在交换: 一个带有非分区表的分区表 一个带分区表的子分区表。 所以你需要在你的案例中使用两个步骤。 你将有一个分区的虚拟表。 那你会的 交换table_1 partition_1虚拟Exchange table_2 partition_1虚拟 你会重复所有的分区。 When you are doing a partition exchange, you are exchanging either: a partitioned table with a non parti
...
这不是如何删除Oracle中的重复项。 灵感,但不适用于该数据库。 像这样的东西: delete error_table et
where et.inserted_date >= date '2017-08-01' and
et.inserted_date <= date '2017-08-11' and
rowid > (select min(et2.rowid)
from error_table et2
...
首先,我质疑PARTITIONing是否有用。 你的应用程序喜欢什么? 其次,我从来没有找到SUBPARTITION ,所以我质疑子子分区是否也适用于我们。 我只发现了PARTITIONing加快SELECT两种情况。 我可以提到关于管理员的事情由PARTITIONing帮助的3种情况。 更多讨论 。 请解释你的分区目的。 First, I question whether PARTITIONing is useful at all. What is your application like?
...
你可以这样试试:使用INTERVAL来告诉oracle创建自动分区。 你必须定义列(数字或日期)和间隔(在我的例子中是1个月)。 Oracle将以相同的时间间隔(在本例中为同一个月)将所有行放入同一分区。 如果该分区不存在将被创建。 create table log(
id_dispositive number,
date date,
status number,
type number
)
partition by ra
...
与您的断言相反,第一个表无错误地工作,将示例数据插入其中: INSERT INTO `ox_data_archive_20120108` VALUES (1, 2, 3, '2012-01-31 04:10:03');
导致与第二个表相同的错误。 错误中给出的值(734898)恰好是to_days('2012-01-31') 。 您收到此错误的原因是您在2010年1月1 日至3日期间只有分区。示例数据的日期和年份都在定义的分区之外。 而不是TO_DAYS (返回从第0年到给定日期的天数),您可能
...
您需要添加空格以获取正确的语法: vsql := 'alter table ppl.test rename column' || my_tab.month || 'TO' || v_cur_month_name;
=>
vsql := 'alter table ppl.test rename column ' || my_tab.month || ' TO ' || v_cur_month_name;
DBFiddle演示 无论如何,动态列重命名表示设计不佳。 You need to add s
...
对于 select b.CityName, a.val1, a.val2
from DataRepo a
left join City b on a.CityID = b.CityID
where (a.LogTime >= '2015-08-01 00:00:00'
and a.LogTime <= '2015-08-05 00:00:00' )
and a.RegionID = 1
and a.ProvinceID =
...
使用ALL_IND_PARTITIONS.TABLESPACE_NAME而不是ALL_PART_INDEXES.DEF_TABLESPACE_NAME 。 Use ALL_IND_PARTITIONS.TABLESPACE_NAME instead of ALL_PART_INDEXES.DEF_TABLESPACE_NAME.
如果IPA_PRCADJ_HDR已存在则... insert into IPA_PRCADJ_HDR select * from DUAL
如果要根据DUAL中的记录创建IPA_PRCADJ_HDR ... create table IPA_PRCADJ_HDR as select * from DUAL
If IPA_PRCADJ_HDR already exists then ... insert into IPA_PRCADJ_HDR select * from DUAL
If
...