質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

4463閲覧

PL/SQL PROCEDURE内の静的SQLにて一時テーブルを作成する方法

yoshizaka

総合スコア18

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/05/20 02:13

Oracle 11gのPL/SQLでPROCEDURE内の静的SQLで一時テーブルが作成できないか模索しております。

静的SQLはPROCEDURE内(正確にはPackge BodyのPROCEDURE)だとCREATEが
そのままでは使えないのかエラーが発生してしまいます。
EXECUTEを使って動的になら成功しているので
実装は可能なのですが、静的にできるのなら
そちらの方がお作法的に良いのではないか?と思って
この質問をさせて頂いております。
ご存知の方がいらっしゃいましたらどうかご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

一時表はあらかじめCREATEしておく必要があります。
create global temporary table テーブル名...
ですから、Orlofskyさんの「一時表なら特にPL/SQLの中で実行する必要性を感じませんが。」になります。

投稿2018/05/20 04:37

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshizaka

2018/05/20 13:21

ご回答ありがとうございます。一時表が必要になった理由はプライマリーキーのカラムの値を入れ替える処理が不定期に発生するので、複数カラムを一斉更新するために用意しようと思ったためです(一時表が使われるプロシージャはIEのHTMLから呼ばれます)。プライマリーキーのレコードはFORALLだと一時的に同じ値のカラムが発生するため駄目でしたが、検証した結果テーブル同士を結合して更新なら大丈夫だったためです。
guest

0

ベストアンサー

動的SQLになるので、EXECUTE IMMEDIATE文 で CREATE文を実行します。一時表なら特にPL/SQLの中で実行する必要性を感じませんが。

投稿2018/05/20 02:35

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshizaka

2018/05/20 13:13

ご回答ありがとうございます。やはり静的にはプロシージャ内では無理なんですね。一時表をProcedure内で必要だと感じてしまっているので、どうも私の知識が色々不足しているようです。Oracle自体の学習をしなおしてきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問