Jas*_*ker 93 oracle ddl oracle10g
我是否正确理解CREATE OR REPLACE基本上意味着"如果对象存在,丢弃它,然后以任何方式创建它?"
如果是这样,我做错了什么?这有效:
CREATE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')
Run Code Online (Sandbox Code Playgroud)
这不是(ORA-00922:缺失或无效选项):
CREATE OR REPLACE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')
Run Code Online (Sandbox Code Playgroud)
我做了些蠢事吗?我似乎无法找到有关此语法的大量文档.
Jef*_*emp 33
关于语法的一个好处是,你可以确定a CREATE OR REPLACE永远不会导致你丢失数据(你将失去的最多的是代码,希望你在某个地方存储在源代码控制中).
表的等效语法是ALTER,这意味着您必须显式枚举所需的确切更改.
编辑: 顺便说一句,如果你需要在脚本中执行DROP + CREATE,并且你不关心虚假的"对象不存在"错误(当DROP没有找到表时),你可以做这个:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE owner.mytable';
EXCEPTION
WHEN OTHERS THEN
IF sqlcode != -0942 THEN RAISE; END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)
小智 5
以下脚本应该在 Oracle 上起作用:
BEGIN
EXECUTE IMMEDIATE 'drop TABLE tablename';
EXCEPTION
WHEN OTHERS THEN
IF sqlcode != -0942 THEN RAISE;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
-- To Create or Replace a Table we must first silently Drop a Table that may not exist
DECLARE
table_not_exist EXCEPTION;
PRAGMA EXCEPTION_INIT (table_not_exist , -00942);
BEGIN
EXECUTE IMMEDIATE('DROP TABLE <SCHEMA>.<TABLE NAME> CASCADE CONSTRAINTS');
EXCEPTION WHEN table_not_exist THEN NULL;
END;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
264867 次 |
| 最近记录: |