当我尝试在一个语句中删除多个列时出现此错误: -
ALTER TABLE "RLX_ROLES" DROP COLUMN ("test","test_2");
但如果我逐一删除它们,它就会起作用: -
ALTER TABLE "RLX_ROLES" DROP COLUMN "test";
ALTER TABLE "RLX_ROLES" DROP COLUMN "test_2";
为什么这样?我的语法不正确吗?
编辑: - 我也尝试过: -
ALTER TABLE RLX_ROLES DROP (test,test_2);
和
ALTER TABLE RLX_ROLES DROP COLUMN (test,test_2);
更新: -
显然,我拼错了其中一个列名,对不起。
答案 0 :(得分:4)
您必须使用以下语句删除多个列:
alter table table_name drop (col_name1, col_name2);
然后您必须删除语句中的“column”关键字。
答案 1 :(得分:1)
Drop table列显示错误:标识符无效?
ALTER TABLE" RLX_ROLES" DROP COLUMN(" test"," test_2");
您正在使用的alter语句中有两个不正确的内容。
使用双引号:
SQL> ALTER TABLE t DROP ("b", "c");
ALTER TABLE t DROP ("b", "c")
*
ERROR at line 1:
ORA-00904: "c": invalid identifier
SQL>
因此,请删除column关键字和双引号。
关于Removing Columns from Tables的全部记录。
从表中删除列
当您发出ALTER TABLE ... DROP COLUMN语句时,该列 描述符和与目标列关联的数据将被删除 从表中的每一行。您可以删除多个列 言。
删除单列:
SQL> CREATE TABLE t(
2 A NUMBER,
3 b NUMBER,
4 c NUMBER
5 );
Table created.
SQL>
SQL> ALTER TABLE t DROP column c;
Table altered.
删除多列:
SQL> drop table t purge;
Table dropped.
SQL> CREATE TABLE t(
2 a NUMBER,
3 b NUMBER,
4 c NUMBER
5 );
Table created.
SQL>
SQL> ALTER TABLE t DROP (b, c);
Table altered.
SQL>
答案 2 :(得分:0)
您必须删除双引号。它们不是必需的,如果您想删除多个列,则必须删除关键字column
。
ALTER TABLE RLX_ROLES DROP (test,test_2);
有关alter
语法的详细信息,请参阅here。
答案 3 :(得分:0)
据推测,您无意中使用区分大小写的列名创建了表(通过使用双引号)。如果是这种情况,您必须使用双引号和DROP
语句中的确切拼写:
create table RLX_ROLES("test" number, "Test_2" number, test3 number);
alter table RLX_ROLES drop ("Test_2","test");
要生成用于删除具有正确拼写的所有列的SQL语句,可以使用此语句(请注意,如果不更改运行此语句将引发错误,因为您无法删除表中的所有列):
select 'alter table ' || table_name ||
' drop (' ||
listagg('"' || utc.column_name || '"', ',') within group (order by utc.column_name) ||
');'
from user_tab_cols utc
where table_name = 'RLX_ROLES'
group by table_name;
查询user_tab_cols
字典视图以获取RLX_ROLES表的所有列名,并使用LISTAGG
聚合函数将它们连接起来。