当我打开查看源代码时,子句 "NOFORCE" 消失了
When I open a View source, the clause "NOFORCE" disappear
我创建了一个这样的随机视图:
CREATE OR REPLACE NOFORCE VIEW TEMP_VIEW (first_name, age) AS
SELECT 'Gladiolus' first_name, 23 age
FROM dual
/
然后我检查了一下:
SELECT * FROM temp_view
/
FIRST_NAME AGE
---------- ----------
Gladiolus 23
现在,当我打开源代码进行编辑时(使用 PLSQL Developer 和 SQL Navigator)我得到了这个:
CREATE OR REPLACE VIEW TEMP_VIEW AS
SELECT 'Gladiolus' first_name, 23 age
FROM dual;
别名 (first_name, age)
被省略,因为它们等于子查询的列。
但是你能告诉我为什么子句 NOFORCE
也没有显示吗?
谢谢!!
NOFORCE
是默认值,因此保留它是多余的。
一些关键字控制对象的创建方式,但它们不是对象定义的一部分。 Oracle 并不总是关心 "how" 对象的创建,并不总是存储用于创建它的选项。
当 Oracle 和第 3 方工具创建 DDL 语句时,它们必须猜测您想要使用哪些选项。这些工具做出不同的猜测或语法差异很小的情况并不少见。
(这是将所有 DDL 存储在版本控制的文本文件而不是数据库中的众多原因之一。您放入数据库中的内容 NOT 与你得到了什么。)
以另一种方式使用您的示例:
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
对象的真实"source"根本不包含任何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 生成器允许您控制其中的一些选项,但根据我的经验,none 它们可以让您完全控制所有这些选项。
我创建了一个这样的随机视图:
CREATE OR REPLACE NOFORCE VIEW TEMP_VIEW (first_name, age) AS
SELECT 'Gladiolus' first_name, 23 age
FROM dual
/
然后我检查了一下:
SELECT * FROM temp_view
/
FIRST_NAME AGE
---------- ----------
Gladiolus 23
现在,当我打开源代码进行编辑时(使用 PLSQL Developer 和 SQL Navigator)我得到了这个:
CREATE OR REPLACE VIEW TEMP_VIEW AS
SELECT 'Gladiolus' first_name, 23 age
FROM dual;
别名 (first_name, age)
被省略,因为它们等于子查询的列。
但是你能告诉我为什么子句 NOFORCE
也没有显示吗?
谢谢!!
NOFORCE
是默认值,因此保留它是多余的。
一些关键字控制对象的创建方式,但它们不是对象定义的一部分。 Oracle 并不总是关心 "how" 对象的创建,并不总是存储用于创建它的选项。
当 Oracle 和第 3 方工具创建 DDL 语句时,它们必须猜测您想要使用哪些选项。这些工具做出不同的猜测或语法差异很小的情况并不少见。
(这是将所有 DDL 存储在版本控制的文本文件而不是数据库中的众多原因之一。您放入数据库中的内容 NOT 与你得到了什么。)
以另一种方式使用您的示例:
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
对象的真实"source"根本不包含任何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 生成器允许您控制其中的一些选项,但根据我的经验,none 它们可以让您完全控制所有这些选项。