一些关键字控制对象的创建方式,但它们不是对象定义的一部分。Oracle 并不总是关心对象是“如何”创建的,也不总是存储用于创建它的选项。
当 Oracle 和第 3 方工具创建 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
但是contains生成的 DDLFORCE
和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 生成器允许您控制其中一些选项,但根据我的经验,它们都不能让您完全控制所有选项。