2017-02-15 8 views
0

私はCREATE TABLEにコマンドを与え、テーブルに値をINSERTしましたが、その値は保存されませんでした。次回のログイン時にテーブルはありますが、挿入されたデータはありません。 「選択された行がありません」は、画面に表示されているステートメントです。 ORACLE 11gの変更を保存してください。Oracle 11gで作成されたテーブルの保存方法は?

+3

挿入物をコミットするのを忘れた可能性があります。 –

+0

https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4010.htmを必ずお読みください。 – XING

答えて

0

ソリューション

まず、常に暗黙的にOracleデータベースのクライアントアプリケーションを設定し、終了(オラクルによる行動recommended)の前またはロールバックトランザクションをコミットします。データベースtransactionsについて学習し、Oracle Databaseクライアント・アプリケーションを自動コミット・モードに設定するか、明示的にD.M.Lをコミットします。トランザクション(COMMITステートメント)を使用すると、クライアントアプリケーションのコミット動作に頼るべきではないためです。データベーストランザクション

データベーストランザクション

概要は、データベース管理システムの基本的な概念です。取引の本質的な特性は、そのアトミックです:トランザクションはどちらか

  • がコミットされ(データベースの変更は、すべてのことは、ディスク上に格納され、永久作られています)。または
  • ロールバック(データベースの変更はすべて破棄されます)。

レキシカルには、トランザクションは1つ以上のS.Q.L.これらの種類の文:

  • データ定義言語データベースの構造を変更(D.D.L.)文(CREATEDROPALTERGRANTREVOKE、...);取得またはコンテンツデータベースのを変更
  • データ操作言語(D.M.L.)文(INSERTDELETEUPDATESELECT、...)。

    • 自動コミットモード、暗黙のトランザクションが暗黙的にD.D.L.前に開始されます:

    Databaseクライアント・アプリケーションは、2つの異なるモードで動作することができますD.M.L.黙示的に成功を収め、D.D.L. D.M.L.ステートメント、および明示的なトランザクションは、明示的にBEGINステートメントで開始され、COMMITステートメントで明示的にコミットされ、ROLLBACKステートメントでロールバックされます。

  • 非自動コミットモードで、混在トランザクションはD.D.Lより前に暗黙的に開始されます。 D.M.L.文は明示的にCOMMITステートメントでコミットされ、ROLLBACKステートメントでロールバックされます。

両方のモードで、データベースクライアントアプリケーションが正常に終了する前に暗黙的にトランザクションがコミットされ、データベースクライアントが異常終了する前に暗黙的にロールバックされます。 D.D.Lをロールバックすることをサポートしていないデータベース管理システムの場合(Maria D.B.、Oracle Database、S.Q.L. Server)、取引は暗黙のうちにD.D.L.ステートメント。それはD.D.L.あるので、あなたは、あなたのCREATE声明を発表した

説明

Oracle DatabaseはD.D.Lをロールバックすることはサポートしていません。テーブルを作成するトランザクションは暗黙的にコミットされました。そのため、新しいセッションを開始した後でもテーブル構造が残っています。しかし、INSERT声明を発行したとき、それはD.M.L.自動コミット・モードではないため、表に移入するトランザクションはではなく、が暗黙的にコミットされました。終了前にトランザクションを暗黙的にコミットするようにOracle Databaseクライアント・アプリケーションを設定していないため、新しいセッションの開始後に表の内容が消失したのはこのためです。

関連する問題