当我第一次运行下面的查询它的工作,但在我再次运行此查询后我得到异常
Select count(*) into rec from all_tables where table_name='DefaultTable';
if(rec=1) then
CREATE TABLE DefaultTable(
Code INT NOT NULL,
Code1 INT NOT NULL,
ResultCode INT NOT NULL,
CONSTRAINT DefaultTable_PK PRIMARY KEY(Code,Code1)
);
else
PRMOPT DefaultTable Already Exist //To print in Console
end if;
谁能说出我做错了什么?写上面的查询我做错了什么?
Error starting at line 2 in command:
if(rec=1) then
Error report:
Unknown Command
Error starting at line 3 in command:
CREATE TABLE DefaultTable(
Code INT NOT NULL,
Code1 INT NOT NULL,
ResultCode INT NOT NULL,
CONSTRAINT DefaultTable_PK PRIMARY KEY(Code,Code1)
Error at Command Line:3 Column:14
Error report:
SQL Error: ORA-00955: name is already used by an existing object
00955. 00000 - "name is already used by an existing object"
*Cause:
*Action:
Error starting at line 16 in command:
else
Error report:
Unknown Command
Error starting at line 17 in command:
PRMOPT Table Already Exist
Error report:
Unknown Command
Error starting at line 18 in command:
end if
Error report:
Unknown Command
答案 0 :(得分:1)
好吧,据我所知,作者试图在一个SQL查询中执行此操作。但是在Oracle中,你不能在简单的sql中使用IF语句。此外,即使您使用PL / SQL,也不允许直接从PL / SQL代码调用DDL语句,因此您应该使用动态SQL。我认为,以下脚本将执行您想要的操作:
DECLARE
rec NUMBER;
BEGIN
SELECT COUNT(*) INTO rec FROM all_tables WHERE table_name='DEFAULTTABLE';
IF (rec=0) THEN
EXECUTE IMMEDIATE 'CREATE TABLE DefaultTable(
Code INT NOT NULL,
Code1 INT NOT NULL,
ResultCode INT NOT NULL,
CONSTRAINT DefaultTable_PK
PRIMARY KEY(Code,Code1,ResultCode)
)';
ELSE
dbms_output.put_line('DefaultTable Already Exist');
END IF;
END;
请注意,为了查看通过dbms_output打印的消息,您应该执行:
SET SERVEROUTPUT ON;
答案 1 :(得分:0)
如果您阅读错误消息,您会注意到: ORA-00955:名称已被现有对象使用
这意味着您正在尝试创建已存在的表。这就解释了为什么它第一次运行而不是之后的运行。
检查all_tables中的条目,您会发现Oracle以大写形式创建表名。所以检查'DEFAULTTABLE'。