1

次のようなランダムなビューを作成しました。

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も表示されていない理由を教えていただけますか?

ありがとうございました!!

4

2 に答える 2

2

一部のキーワードは、オブジェクトの作成方法を制御しますが、オブジェクト定義の一部ではありません。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_DDLcontains FORCEOR 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 データベースからコードを再生成する場合に異なる可能性があるものの不完全なリストです。

  1. OR REPLACE
  2. FORCE| |NOFORCE
  3. AND RESOLVE| | AND COMPILE(Java用)
  4. 空白
  5. 場合
  6. 列リスト
  7. 二重引用符
  8. ターミネーター

さまざまな DDL ジェネレーターを使用すると、これらのオプションの一部を制御できますが、私の経験では、すべてを完全に制御できるものはありません。

于 2016-12-14T05:02:39.620 に答える