oracle ORA-00933: SQL 命令未正确结束
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4820183/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
ORA-00933: SQL command not properly ended
提问by CodeRocker
I'm getting this error in Oracle:
我在 Oracle 中收到此错误:
ORA-00933: SQL command not properly ended
for
DROP SEQUENCE IF EXISTS ownername.seq_name;
ORA-00933:
对于
DROP SEQUENCE IF EXISTS ownername.seq_name,SQL 命令没有正确结束;
Why am I seeing this?
为什么我会看到这个?
回答by Vincent Malgrat
the IF EXISTS
clause doesn't exist in the DROP SEQUENCE
command in Oracle.
OracleIF EXISTS
中的DROP SEQUENCE
命令中不存在该子句。
You could use a PLSQL block to ignore the error:
您可以使用 PLSQL 块来忽略错误:
SQL> DECLARE
2 sequence_doesnt_exist EXCEPTION;
3 PRAGMA EXCEPTION_INIT(sequence_doesnt_exist, -2289);
4 BEGIN
5 EXECUTE IMMEDIATE 'DROP SEQUENCE seq_name';
6 EXCEPTION
7 WHEN sequence_doesnt_exist THEN NULL;
8 END;
9 /
PL/SQL procedure successfully completed
回答by OMG Ponies
As others mentioned, the IF EXISTS doesn't work on the DROP SEQUENCE command.
正如其他人提到的,IF EXISTS 不适用于 DROP SEQUENCE 命令。
To test for the existence of a sequence, you need to check the appropriate view:
要测试序列是否存在,您需要检查相应的视图:
SELECT *
FROM USER_SEQUENCES
WHERE sequence_name = ?
SELECT *
FROM DBA_SEQUENCES
WHERE sequence_name = ?
SELECT *
FROM ALL_SEQUENCES
WHERE sequence_name = ?
Example:
例子:
BEGIN
FOR i IN (SELECT sequence_name
FROM USER_SEQUENCES
WHERE sequence_name = ?)
LOOP
EXECUTE IMMEDIATE ('DROP SEQUENCE '|| i.sequence_name);
END LOOP;
END;
回答by Chandu
Try this:
尝试这个:
DECLARE
iNum NUMBER DEFAULT 0;
BEGIN
SELECT COUNT(1)
INTO iNum
FROM ALL_SEQUENCES
WHERE SEQUENCE_OWNER='<OWNER_NAME>'
AND SEQUENCE_NAME = '<YOUR_SEQUENCE_NAME>';
IF iNum> 0 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE <OWNER_NAME>.<YOUR_SEQUENCE_NAME>';
END IF;
END;
回答by Pablo Santa Cruz
The problem is "if exists" does not work in Oracle. Use:
问题是“如果存在”在 Oracle 中不起作用。用:
drop sequence ownername.seq_name;