[PR]
Posted on Thursday, Apr 24, 2025 19:45
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
redius DB
Posted on Tuesday, Jul 02, 2013 21:34
RAISE文の利用の仕方 サンプル1
Posted on Tuesday, Jun 22, 2010 14:24
RAISE文をいれて、強制的にエラーを起こさせ
エラーハンドリングの確認をすることができます。
下記にその例を記述します。
-------------------------------------------------------------------
SET SERVEROUTPUT ON
DECLARE
BEGIN
RAISE ZERO_DIVIDE;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM(SQLCODE));
END;
-------------------------------------------------------------------
SQLPLUS上では、SET SERVEROUTPUT ONは予め実行しておいてください。
DBMS_OUTPUT.PUT_LINE文が表示されるようになります。
また、RAISEの例外は、予約されている定義を使ってもいいですし
自分でも作成することも可能です。
Oracle キャッシュクリア
Posted on Monday, Jun 21, 2010 13:36
共有プールなどに、キャッシュが残りそのあとの検索が早くなるようになります。
ただし、パフォーマンス計測等では、正しい計測ができなくなってしまうため
その場合は、下記コマンドを利用してクリアしてから実行するのもお勧めです。
※但し、実行前には、他にDBを利用している人にアナウンスしておくべきでしょう。
■全てのバッファキャッシュをクリア(10gより)
ALTER SYSTEM FLUSH BUFFER_CACHE;
■共有プール上をクリア
ALTER SYSTEM FLUSH SHARED_POOL;
※ 共有プールの断片化が酷く発生しているときは、
上記コマンドで共有プールをFLUSHすることで改善可能だそうです。
共有プールは、割り当てが小さかった場合等でも
エラーが発生するケースもあるので
そのときはサイズの見直し等も検討するといいかもしれません。
【 コマンド 】 ファイル連結
Posted on Thursday, Jun 03, 2010 14:51
以下のコマンドでも連結できるのでご参考ください。
下記の例は、aaaaa.txt と bbbbb.txt を zzz.txt にまとめたものです。
-------------------------------------------
DOS>more aaaaa.txt
aaaaaa aaaaaa
111111 111111
DOS>more bbbbb.txt
bbbbbb bbbbbb
111111 111111
DOS>type aaaaa.txt bbbbb.txt >zzz.txt
aaaaa.txt
bbbbb.txt
DOS>more zzz.txt
aaaaaa aaaaaa
111111 111111
bbbbbb bbbbbb
111111 111111
DBMS_OUTPUTで255文字以上の文字を表示する関数
Posted on Thursday, May 20, 2010 17:29
DBMS_OUTPUT.PUT_LINE()は、255文字以上の文字列を表示させようとすると
ORU-10028: line length overflow, limit of 255 chars per line
とエラーが発生して中身が見れません。
それでもデバッグで出力で見たい場合は、
下記を参考に分割して表示させちゃいましょう。
---------------------------------------------------------------------------------
set serveroutput on
DECLARE
-- 関数パラメータ宣言
P_DATE DATE DEFAULT SYSDATE;
-- 変数宣言
sSTRING VARCHAR2(4000);
PROCEDURE DISP( m VARCHAR2, d BOOLEAN DEFAULT FALSE )
/*----------------------------------------------------------
--
-- 関数名: DISP
-- 引数1 : m VARCHAR2 表示させたい文字列
-- 引数2 : d BOOLEAN デバッグ用出力フラグ
--
-- 概要 : 255文字以上の文字列をコンソールに表示する
-- DBMS_OUTPUT.PUT_LINEで出力制限が255文字のため
-- 文字列を表示可能文字数に分割して全て表示する
-- 例 : 表示したい26文字を1回7文字ずつ表示を例とする
-- よって7文字を4回に分けて表示する。
-- ABCDEFG HIJKLMN OPQRSTU VWXYZ
-- 1234567 1234567 1234567 12345
-- 1回目: ABCDEFG
-- 2回目: HIJKLMN
-- 3回目: OPQRSTU
-- 4回目: VWXYZ
----------------------------------------------------------*/
IS
sWK VARCHAR2(255); -- 分割文字列格納
nLEN NUMBER; -- 表示したい文字数
nMAX NUMBER; -- 分割する文字数
nMOD NUMBER; -- 分割回数
nST NUMBER; -- 表示したい文字の開始位置
i NUMBER; -- FOR分用
BEGIN
--------------------------------------------------------
-- 初期設定
--------------------------------------------------------
IF d THEN
-- DEBUG出力
DBMS_OUTPUT.PUT_LINE( '----------------------------------DEBUG.START' );
END IF;
nMAX := 250;
nLEN := LENGTH(m);
nMOD := TRUNC(nLEN / nMAX);
IF nMAX * nMOD < nLEN THEN
nMOD := nMOD + 1;
END IF;
IF d THEN
-- DEBUG出力
DBMS_OUTPUT.PUT_LINE( '--------- nLEN: ' || TO_CHAR(nLEN) );
DBMS_OUTPUT.PUT_LINE( '--------- nMAX: ' || TO_CHAR(nMAX) );
DBMS_OUTPUT.PUT_LINE( '--------- nMOD: ' || TO_CHAR(nMOD) );
END IF;
--------------------------------------------------------
-- 表示した文字を表示
-- 分割する文字数で区切って表示し
-- 表示したい文字を全て表示する
--------------------------------------------------------
-- 分割回数分ループする
FOR i IN 1..nMOD LOOP
-- 表示したい文字の開始位置を取得
nST := ( i - 1 ) * nMAX + 1;
IF d THEN
-- DEBUG出力
DBMS_OUTPUT.PUT_LINE( '--------- i: ' || TO_CHAR(i) );
DBMS_OUTPUT.PUT_LINE( '--------- nST: ' || TO_CHAR(nST) );
DBMS_OUTPUT.PUT_LINE( '--------- nMAX: ' || TO_CHAR(nMAX) );
END IF;
-- 表示する文字を区切り表示する
sWK := SUBSTR( m, nST, nMAX );
DBMS_OUTPUT.PUT_LINE( sWK );
END LOOP;
IF d THEN
-- DEBUG出力
DBMS_OUTPUT.PUT_LINE( '----------------------------------DEBUG.END' );
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('PROC: DISP() SQLCODE: ' || TO_CHAR(SQLCODE) );
DBMS_OUTPUT.PUT_LINE('PROC: DISP() SQLERRM: ' || SQLERRM(SQLCODE) );
END;
BEGIN
dbms_output.enable(10000000);
sSTRING := 'qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm';
DISP(sSTRING);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('SQLCODE: ' || SQLCODE);
dbms_output.put_line('SQLERRM: ' || SQLERRM(SQLCODE) );
END;
----実行結果サンプル ----
qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfgh
jklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm
PL/SQLプロシージャが正常に完了しました。