9

テーブルが現在データベースに存在しない場合にのみテーブルを作成するために使用する正しい構文を誰かに教えてもらえますか?

現在、Oracleに接続してデータベースでステートメントを実行するためにJava GUIをプログラミングしていますが、これをJava制約として実装するのかSQLPlus制約として実装するのか疑問に思っています。

4

4 に答える 4

7

通常、オブジェクトは実行時に作成されるべきではなく、アプリケーションはインストール時に作成されたオブジェクトを認識している必要があるため、テーブルが存在するかどうかを確認することはあまり意味がありません。これがインストールの一部である場合は、プロセスの任意の時点でどのオブジェクトが存在するかを知っておく必要があるため、テーブルがすでに存在するかどうかを確認する必要はありません。

ただし、本当に必要な場合は、

  • テーブルの作成を試みて、「ORA-00955:名前は既存のオブジェクトによってすでに使用されています」という例外をキャッチすることができます。
  • クエリを実行してUSER_TABLES(またはALL_TABLESDBA_TABLES他のユーザーが所有するオブジェクトとデータベース内の特権を作成しているかどうかに応じて)、テーブルがすでに存在するかどうかを確認できます。
  • テーブルを作成する前にテーブルを削除して、存在しない場合は「ORA-00942:テーブルまたはビューが存在しません」という例外をキャッチすることができます。
于 2013-03-15T16:09:05.800 に答える
1

次の手順でこれを行うことができます-

BEGIN
    BEGIN
         EXECUTE IMMEDIATE 'DROP TABLE <<Your Table Name>>';
    EXCEPTION
         WHEN OTHERS THEN
                IF SQLCODE != -942 THEN
                     RAISE;
                END IF;
    END;

    EXECUTE IMMEDIATE '<<Your table creation Statement>>';

END;

これがお役に立てば幸いです。

于 2013-03-15T16:27:44.533 に答える
1

@Archieあなたの質問に答えたいと思います。@Piyas Deコードを盗んですみません:)。

@Piyas Deの回答を少し更新します。

BEGIN
    BEGIN
        EXECUTE IMMEDIATE '<<Your table creation Statement>>';
    EXCEPTION
        WHEN OTHERS THEN
            IF SQLCODE == -955 THEN
                RAISE;
            END IF;
    END;
END;
于 2016-04-21T15:02:48.607 に答える
0
try
{
    // insert query for insert new record in your table 
}
catch(Exception Ex)
{
    //if it throw exception then catch it

     int s=Ex.getErrorCode(); // check it for 903 error

     //903 is table not existing error in oracle11g

 // then create your new table here otherwise if table present then record get stored in database
}
于 2013-03-15T16:35:33.567 に答える