※ ChatGPTを利用し、要約された質問です(原文:ストアドプロシージャからアナライズをしたいです)
ストアドプロシージャからアナライズする方法とは?
このQ&Aのポイント
ストアドプロシージャから「DBMS_STATS.GATHER_TABLE_STATS」パッケージを使ってアナライズを行いたいです。
SQL*Plusからは正常に動作するのですが、プロシージャから実行するとコンパイルエラーが発生します。
テーブル名を動的に変更することも検討していますが、まずはコンパイルを通したいです。
どなたかアドバイス願います。
ストアドプロシージャから「DBMS_STATS.GATHER_TABLE_STATS」パッケージを使って
アナライズをやりたいと思っているのですができません。
以下のSQLをSQL*Plusから実行するとうまく動作するのですが、
プロシージャから「EXECUTE IMMEDIATE」を使って動作させると
コンパイルエラーとなってしまうのです。
※本当はテーブル名を動的に変更したいと考えているのですが、まずはコンパイルを
通したいと思いまして以下サンプルとしています。
(SQL*Plus経由で以下を実行すると動作します)
exec DBMS_STATS.GATHER_TABLE_STATS (OWNNAME=>'SCOTT',TABNAME=>'EX001',METHOD_OPT =>'FOR ALL INDEXED',CASCADE => TRUE);
(コンパイルエラーとなるプロシージャ)
CREATE OR REPLACE PROCEDURE TEAT01 AS
BEGIN
EXECUTE IMMEDIATE DBMS_STATS.GATHER_TABLE_STATS (OWNNAME=>'SCOTT',TABNAME=>'EX001',METHOD_OPT =>'FOR ALL INDEXED',CASCADE => TRUE);
END TEAT01;
(エラーメッセージ)
Error(3,19): PLS-00222: この有効範囲内に、名前GATHER_TABLE_STATSの関数は存在しません。
以上よろしくお願いします。
お礼
dda167さん baunceです。 EXECUTE IMMEDIATE を外す事で動作確認できました。 冷静に考えたら「EXECUTE IMMEDIATE」が不要である事も 理解できました。 動的にテーブル名を変える事もできました。 ありがとうございました。