大家好,我正在做我的数据库课程(SQLPlus),我更改了我的表名,然后我得到这个错误出现在所有的表,而不仅仅是那些我更改了名称的表。
CREATE TABLE Invoice(
Inv# varchar2(8) primary key, /*Inv# is the primary key*/
InvDate date,
Total number(6) not null, /*Total cannot be null, total is the whole reason you want an invoice*/
Cust# varchar2(8),
Foreign Key (Cust#) references Customer(Cust#) /*Foreign key is customer */
); 这是起作用的代码。我有一种奇怪的感觉,如果我把InvDate改成Date,那就不太好了,但我还是这么做了,因为我的老师希望这个属性被命名为Date。我在错误后更改了名称,但它仍然产生错误00054。
任何帮助都将不胜感激
谢谢,弗莱德
发布于 2020-11-26 10:49:53
正如注释中正确提到的,当您的表被DML的不同会话锁定时,就会发生此错误。
你可以通过DBA_DDL_LOCKS (较小的概率)或DBA_DML_LOCKS搜索它。您将能够找到锁定此表的会话,然后您可以终止该会话或从锁定此表的会话触发回滚/提交。
如果你是新手,数据库只有你一个人使用,并且你确定锁定会话对你没有用处,那么就跳过你的数据库。它将从所有对象中释放所有锁(对于生产环境不是首选的,但这是解决问题的一种简单方法,不需要深入研究)。
除此之外,您不能为oracle保留关键字指定列名。date是一个Oracle保留关键字。Oracle建议不要使用Oracle保留关键字作为对象或列的名称。不过,如果您想给出这样的名称,请使用双引号。"Column_name" -就像这样。但是,列名称将区分大小写,并且无论在查询中使用双引号还是大小写正确的列名称,都必须使用双引号。
我希望我已经给出了足够的描述来解决你的疑问。
https://stackoverflow.com/questions/65014822
复制相似问题