117

CREATE OR REPLACE は基本的に「オブジェクトが存在する場合は、それをドロップし、いずれかの方法で作成する」ことを意味することを理解するのは正しいですか?

もしそうなら、私は何を間違っていますか?これは機能します:

CREATE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')

そして、これはそうではありません (ORA-00922: オプションが見つからないか無効です):

CREATE OR REPLACE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')

私は愚かなことをしていますか?この構文に関する多くのドキュメントを見つけることができないようです。

4

14 に答える 14

173

これは、関数、プロシージャ、パッケージ、タイプ、シノニム、トリガー、およびビューで機能します。

アップデート:

投稿を3回更新した後、これを再定式化します。

これはテーブルでは機能しません:)

はい、この構文に関するドキュメントREPLACEがあり、のオプションはありませんCREATE TABLE

于 2009-06-17T16:48:58.693 に答える
34

構文の優れた点の1つは、CREATE OR REPLACEデータが失われることは決してないということです(最も失われるのはコードであり、ソース管理のどこかに保存されていることを願っています)。

テーブルの同等の構文はALTERです。これは、必要な正確な変更を明示的に列挙する必要があることを意味します。

編集: ちなみに、スクリプトでDROP + CREATEを実行する必要があり、誤った「オブジェクトが存在しません」エラー(DROPがテーブルを見つけられない場合)を気にしない場合は、次のことができます。これ:

BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE owner.mytable';
EXCEPTION
  WHEN OTHERS THEN
    IF sqlcode != -0942 THEN RAISE; END IF;
END;
/
于 2009-06-18T02:05:42.907 に答える
25

Oracleにはテーブルの作成または置換はありません。

絶対です:

DROP TABLE foo;
CREATE TABLE foo(....);
于 2009-06-17T16:49:06.103 に答える
12

CREATE OR REPLACE関数、プロシージャ、タイプ、ビュー、またはパッケージでのみ使用できます。テーブルでは機能しません。

于 2009-06-17T16:50:49.067 に答える
5

次のスクリプトは、Oracleでトリックを実行する必要があります。

BEGIN
  EXECUTE IMMEDIATE 'drop TABLE tablename';
EXCEPTION
  WHEN OTHERS THEN
    IF sqlcode != -0942 THEN RAISE; 
    END IF;
END;
于 2010-03-15T21:11:37.540 に答える
4

テーブルでは機能せず、関数などでのみ機能します。

ここにいくつかの例があるサイトがあります。

于 2009-06-17T16:50:26.277 に答える
4
-- To Create or Replace a Table we must first silently Drop a Table that may not exist
DECLARE
  table_not_exist EXCEPTION;
  PRAGMA EXCEPTION_INIT (table_not_exist , -00942);
BEGIN
   EXECUTE IMMEDIATE('DROP TABLE <SCHEMA>.<TABLE NAME> CASCADE CONSTRAINTS');
   EXCEPTION WHEN table_not_exist THEN NULL;
END;
/
于 2014-08-22T15:10:49.800 に答える
1

コードで実行している場合は、最初にクエリ SELECT table_name FROM user_tables WHERE table_name = 'XYZ' を使用してデータベース内のテーブルを確認します

レコードが見つかった場合はテーブルを切り捨て、それ以外の場合はテーブルを作成します

作成または置換のように機能します。

于 2013-12-24T06:22:24.497 に答える
1

CORT ( www.softcraftltd.co.uk/cort ) を使用できます。このツールを使用すると、Oracle でテーブルを作成または置換できます。次のようになります。

create /*# or replace */ table MyTable(
  ... -- standard table definition
);

データを保存します。

于 2014-01-12T00:50:48.990 に答える