
以下のVIEWをPROCEDURE内で使用しています。
CREATE OR REPLACE VIEW VW_KAIIN
(CODE,NAME,TEL,STARTYMD)
AS
SELECT * FROM KAIIN
WHERE STARTYMD <= TO_CHAR(SYSDATE,'YYYYMMDD')
※STARTYMDには有効な開始日付が入ります。
条件部分でSYSDATEではまずいことになり、
特定の日付を指定しなければならなくなりました。
VIEW自体にパラメータ渡しはできないということで、
CREATE OR REPLACE PROCEDURE TABLE_B_UPDATE
(I_YYYY IN TABLE_A.YYYYY%TYPE,
I_MM IN TABLE_A.MM%TYPE,
I_DD IN TABLE_A.DD%TYPE,)
PROCEDURE内でI_YYYY、I_MM、I_DDを条件に変更した
VIEWを動的に作成して、処理をしたいのですが、
こういった事は可能でしょうか?
そのまま書いてみましたが、CREATE部分でエラーが出てしまい、コンパイルできませんでした。
もし不可能である場合は、代替案をご教授いただけるとありがたいです。
どうかよろしくお願いします。
No.2ベストアンサー
- 回答日時:
プロシージャ内でも動的SQLを使えばDDLの実行はできます。
試してみてください。set serveroutput on
declare
w_str varchar2(1000);
begin
--TABLE作成
execute immediate 'create table test_table(val varchar2(100))';
--データ投入
execute immediate 'insert into test_table values (:val)' using 'テスト';
--VIEW作成
execute immediate 'create view test_view as select * from test_table';
--VIEWからSELECT
execute immediate 'select val from test_view' into w_str;
--結果出力
dbms_output.put_line(w_str);
--TABLE,VIEW削除
execute immediate 'drop table test_table purge';
execute immediate 'drop view test_view';
exception
when others then raise;
end;
/
set serveroutput off
ただ、今回の質問はkouta77さんのおっしゃるとおりVIEW動的に作成する意味がよくわかりませんね。
やりたいこと、目的を明確にしてもらうと何かアドバイスできるかもしれません。
この回答への補足
元々、前任者が作っておったもので、
VIEW自体は、他のプログラムで呼び出したり、共通で使っているのは
間違いないと思います。
私自身、オラクルやPLSQLに触れるのが初めてなものですから、
VIEW自体でパラメータが使えたら一番よかったのですが。
プロシージャ内でVIEWの項目が基本軸として使用されており、
安易に、既存のVIEWのコピーを、プロシージャ内のパラメータを使用して、もうひとつ作ったら、いけるかなぁ、と思ってやってみたところ、ダメでしたので、質問させていただきました。
上記方法ためさせていただきます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- MySQL MYSQL エラー 2 2022/10/18 11:37
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ストアドプロシジャからストア...
-
ストアド実行時のエラー「参照...
-
OracleのTEXT_IOについて
-
質問:DBMS_OUTPUTの使用方法
-
PL/SQL exceptionを呼び出すには?
-
PL/SQLに関して
-
INSERT文の書式
-
時間項目を60進数から10進数へ...
-
PL/SQLについて
-
パッケージ内のファンクション...
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
callで順に実行されるプロシー...
-
Statement ignored というエラー
-
Accessの数値から時間に変換す...
-
likeとsubstrの使いわけについて
-
カーソル定義での条件分岐
-
sqlplusでヘッダーが付かない
-
キャッシュを使わずにSELECTを...
-
エクセルVBAでUserFormを起動し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ストアドプロシジャからストア...
-
ストアド実行時のエラー「参照...
-
PL/SQL exceptionを呼び出すには?
-
時間項目を60進数から10進数へ...
-
PL/SQLについて
-
ストアドプロシージャからアナ...
-
INSERT文の書式
-
PL/SQLで連結(||)と結合(=>)の違い
-
PL/SQL 実行中のSID
-
パッケージ内のファンクション...
-
質問:DBMS_OUTPUTの使用方法
-
Function内に記述したdbms_outp...
-
GET_DDLについて
-
ROW_NUMBER()を使用したデータ取得
-
PL/SQLのファンクションでのOUT...
-
プロシージャ 引数 指定
-
ストアド パッケージについて
-
PL/SQLの例外
-
ストアドプロシージャ結果のフ...
-
新人の頃皆さんどうやってSQL勉...
おすすめ情報