2017-09-16 3 views
2

このコードがテーブルを作成しない理由を聞きたいのですが?すぐにテーブルを作成するにはPL/SQL

BEGIN 
    EXECUTE IMMEDIATE 'create table temp1 as (select * from table)'; 
    COMMIT; 
END; 

これを試すと、テーブルが作成されますが、レコード/データは作成されません。

BEGIN 
    EXECUTE IMMEDIATE 'drop table temp1'; 
    EXECUTE IMMEDIATE 'create table temp1 as (select * from table)'; 
    COMMIT; 
END; 

tableは、私が選択したときにデータがない理由であるグローバルな一時テーブルですが、私はレポートを実行すると、出力はデータを持っています。

重複するデータエラーを修正しようとしています。そのため、一時表を作成する必要があります。

+0

まず、DDL操作(作成、変更、削除、切り捨て)をコミットする必要はなく、自動コミットします。次に、テーブルを作成していないと確信していますか?どう見た?テーブルを作成するスキーマを配置してください。 –

答えて

0

グローバル・テンポラリ・テーブル(GTT)のデータは、それを挿入したセッションからのみアクセスできます。他のセッションでは自分のデータだけが表示されます。グローバルな一時テーブルのデータがグローバルではないという誤解はよくあります。テーブル定義のみがグローバルであり、そのテーブルのデータは挿入されたセッションに対してローカルであり、セッションが終了すると自動的にクリアされますGTTのタイプに応じてコミットします)。

レポートがGTTを照会してデータを検索する場合は、まずグローバル温度テーブルにデータを読み込むプロセスが必要です。

"create table"ステートメント(明示的にコミットする必要はありません)を実行すると、テーブルを作成したセッションが最初に設定されなかったため、GTTに照会してレコードが見つかりませんでした必要なデータを持つGTT。

関連する問題