- ベストアンサー
DBMS_STATS.GATHER_DATABASE_STATSの使い
DBMS_STATS.GATHER_DATABASE_STATSの使い方がわかりません。 PLSQLで下記のように入力して実行しましたが、1時間経っても結果が返ってきません。 BEGIN DBMS_STATS.GATHER_DATABASE_STATS ( OPTIONS => 'GATHER' ,CASCADE => TRUE ) ; END; 記述が間違っているのでしょうか? DBMS_STATSの使い方がわかっていないのですが、プロシージャに埋め込まないとダメなものなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- yamada_g
- ベストアンサー率68% (258/374)
関連するQ&A
- ストアドプロシージャからアナライズをしたいです
どなたかアドバイス願います。 ストアドプロシージャから「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の関数は存在しません。 以上よろしくお願いします。
- ベストアンサー
- Oracle
- PL/SQLプロシージャの実行方法
shスクリプトからplsql ID/PASSWORD@SID @plsql.sql コマンドにてplsql.sqlファイルに記述したPROCEDUREを実行しようと すると、 プロシージャが作成されました。 SQL> となって入力待ちとなり、実行されません。 ごく基本的な質問かもしれませんが、 どうやったらPROCEDUREを実行できるのでしょうか。
- ベストアンサー
- Oracle
- DBMS_OUTPUT.PUT_LINEを実行したらすぐに画面表示する
DBMS_OUTPUT.PUT_LINEを実行したらすぐに画面表示する方法 Oracle 10g を SQLPLUS で使っています。 ストアドプロシージャ内に多数のDBMS_OUTPUT.PUT_LINEを記述しておりますが、プロシージャが終了しないとDBMS_OUTPUT.PUT_LINEの出力結果がが画面表示されません。 たとえば10分の処理だと10分後にまとめてDBMS_OUTPUT.PUT_LINEの表示がされるのですが、DBMS_OUTPUT.PUT_LINEが実行されたタイミングでリアルタイムに画面表示する方法はありますか?
- ベストアンサー
- Oracle
- PLSQLのCASE文でNULLを評価する際の動作について
PLSQLのCASE文でNULLを評価する際の動作について PLSQLのCASE文でNULLを評価する時、下記の例1ではNULLを判定できず、 例2を使えばNULLを判定できました。 問題は解決したのですが理屈がわかりません。 ご存知の方、教えてください。 --例1 DECLARE MOJI VARCHAR2(1); BEGIN CASE MOJI WHEN NULL THEN DBMS_OUTPUT.PUT_LINE('NULL DESU'); ELSE DBMS_OUTPUT.PUT_LINE('NULL DEHA NAI'); END CASE; END; --例2 DECLARE MOJI VARCHAR2(1); BEGIN CASE NVL(MOJI,' ') WHEN ' ' THEN DBMS_OUTPUT.PUT_LINE('NULL DESU'); ELSE DBMS_OUTPUT.PUT_LINE('NULL DEHA NAI'); END CASE; END;
- ベストアンサー
- その他(プログラミング・開発)
- ストアドプロシージャのbegin、end
下記の様なストアドプロシージャを作成し、VB側から実行させています。 どうしても、★SQL文2★の後のreturn文を実行してくれません。 (VB側ではreturn値が0と判断します。) このreturn文を★SQL文2★の前に移動すると、return値が-1として正常に取得できます。 begin、endのブロックの記述に何か間違いがあるのでしょうか? 環境:sqlserver2000,windows2000,vb6 よろしくお願いします。 CREATE PROCEDURE [sp_AAA] @PARAM1 varchar(16) AS begin if (~) begin ★SQL文1★ if (@@ERROR <> 0) begin return @@ERROR end end ★SQL文2★ return -1 ←ココ end
- 締切済み
- SQL Server
- PL/SQL 実行中のSID
自作のストアドプロシージャのどの関数がいつ呼ばれたかを記録したいと思いました。 例えば FUNC_A という関数があって、その関数の先頭で、その関数を実行しているセッションのSIDと関数名を取得できないものでしょうか。 そのようなパッケージ DBMS_**** みたいなものがあって、下記のような感じで使えたらなあと考えています。 ------------------ FUNC_A IS sid NUMBER; funcName VARCHAR2(30); BEGIN SELECT DBMS_****.GET_EXECUTING_SID INTO sid FROM DUAL; SELECT DBMS_****.GET_CURRENT_FUNC INTO funcName FROM DUAL; ... (sid と funcName を現時刻とともに記録) END; ------------------ このような目的に合致したパッケージ、あるいはこの目的を実現する方法などありますでしょうか。 よろしくお願いします
- ベストアンサー
- Oracle
- プロシージャの実行方法
テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、プロシージャ制作までは出来るのですがプロシージャの実行が出来ません。 原因が理解できないのですが返答をお願いします。 create or replace procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END TXT_R; ここまでプロシージャです。 そしてネットで調べた結果引数が無い時は書かなくていいと書かれていたのですが、 exec TXT_R; で実行すると ORA-00900: SQL文が無効です。 となってしまいます。
- 締切済み
- Oracle
- PL/SQLのプロシージャが動かない
テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、declareで実行する時は何の問題も出ないのにプロシージャを作ろうとするとエラーが発生します。 原因が理解できないのですが返答をお願いします。 create or replase procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END; 実行すると ORA-00905: キーワードがありません。 のエラ-が出ます
- ベストアンサー
- Oracle
- PL/SQLでエラー
PL/SQLの使用方法を検討しており、下記のようにサンプルを作成しました。 //1. 宣言部 create or replace package Pac is procedure Pro1(p1 in varchar2); end; / パッケージが作成されました //2. 本体 create or replace package body Pac is procedure Pro1(p1 in varchar2) is tempdate DATE; begin select to_char(sysdate, 'yyyy/mm/dd') INTO tempdate from dual; DBMS_OUTPUT.PUT_LINE('引数は' || p1 || 'です。'); DBMS_OUTPUT.PUT_LINE('日付は' || tempdate || 'です。'); end; end; / パッケージ本体が作成されました //3. 実行 execute Pac.Pro1('a'); // エラー内容 行1でエラーが発生しました。: ORA-00900: invalid SQL statement SQLPlusより、上記の[1. 宣言部]でパッケージを作成し、[2. 本体]で本体部分を作成しました。 その後、[3. 実行]を実施しましたが、 エラーが出力されて実行されません。 何がいけないのかお気づきの点がございましたら、 よろしくお願いします。
- 締切済み
- Oracle