一部のキーワードは、オブジェクトの作成方法を制御しますが、オブジェクト定義の一部ではありません。Oracle は、オブジェクトが「どのように」作成されたかを常に考慮しているわけではなく、オブジェクトの作成に使用されたオプションを常に格納しているわけではありません。
Oracle およびサード パーティのツールが DDL ステートメントを作成するとき、使用するオプションを推測する必要があります。ツールが異なる推測を行ったり、構文がわずかに異なったりすることは珍しくありません。
(これは、すべての DDL をデータベースではなく、バージョン管理されたテキスト ファイルに保存する多くの理由の 1 つです。データベースに入力したものは、取得したものと同じにはなりません。)
あなたの例を別の方法で使用するには:
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
. ただし、によって生成された DDL には、DBMS_METADATA.GET_DDL
contains 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 ジェネレーターを使用すると、これらのオプションの一部を制御できますが、私の経験では、すべてを完全に制御できるものはありません。