一些关键字控制着对象的创建方式,但它们不是对象定义的一部分。 Oracle并不总是在意如何创建对象,也不总是存储用于创建对象的选项。
当Oracle和第三方工具创建DDL语句时,他们必须猜测您希望使用哪些选项。这些工具做出不同的猜测,或者有小的语法差异并不罕见。
(这其中的原因有很多存储所有DDL版本控制的文本文件而不是数据库中的一个。你把数据库会有什么不是一样的,你得到了什么。)
要使用你的榜样另一种方式:
SQL> CREATE NOFORCE VIEW TEMP_VIEW (first_name, age) AS
2 SELECT 'Gladiolus' first_name, 23 age
3 FROM dual
4/
View created.
的看法与NOFORCE
并没有OR REPLACE
创建。但是,DBMS_METADATA.GET_DDL
产生的DDL包含FORCE
,OR REPLACE
等方面的差异:
SQL> select dbms_metadata.get_ddl('VIEW', 'TEMP_VIEW') from dual;
DBMS_METADATA.GET_DDL('VIEW','TEMP_VIEW')
--------------------------------------------------------------------------------
CREATE OR REPLACE FORCE EDITIONABLE VIEW "JHELLER"."TEMP_VIEW" ("FIRST_NAME",
"AGE") AS
SELECT 'Gladiolus' first_name, 23 age
FROM dual
真正的 “源” 的对象不包含任何的CREATE
选项都:
SQL> select text from dba_views where view_name = 'TEMP_VIEW';
TEXT
--------------------------------------------------------------------------------
SELECT 'Gladiolus' first_name, 23 age
FROM dual
下面是当您从Oracle数据库重新生成代码,可能是不同的东西不完全名单:
OR REPLACE
FORCE
| NOFORCE
AND RESOLVE
| AND COMPILE
(用于Java)
- 空白
- 案例
- 栏列出
- 双引号
- 终结者
不同的DDL发电机允许您控制其中的一些选择,但以我的经验无他们让你完全控制他们。
因为它是[默认](https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_8004.htm#SQLRF54762)? –
@LukeWoodward虽然这是默认值,但还是有一点。请参阅下面的答案。 –