忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

comments

redius DB

RedisはANSI Cで実装された、究極に速く、パワフルなキー・バリュー・ストア型のデータベース&サーバだそうです。まだまだ知らないツールがたくさんあります。 ttp://redis.shibu.jp/index.html 下記でもしらないものもあるので勉強したいところ。 Ruby on Rails Backbone.js MySQL Redis AWS(ELB, EC2, RDS, SQS) Jenkins GitHub
PR

0 comments

RAISE文の利用の仕方 サンプル1

PL/SQLで単体テスト及び、デバッグするときに
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の例外は、予約されている定義を使ってもいいですし
自分でも作成することも可能です。


0 comments

Oracle キャッシュクリア

Oracle上で、一度SQLなど実行してしまうと

共有プールなどに、キャッシュが残りそのあとの検索が早くなるようになります。

ただし、パフォーマンス計測等では、正しい計測ができなくなってしまうため

その場合は、下記コマンドを利用してクリアしてから実行するのもお勧めです。

※但し、実行前には、他にDBを利用している人にアナウンスしておくべきでしょう。


■全てのバッファキャッシュをクリア(10gより)
ALTER SYSTEM FLUSH BUFFER_CACHE;

■共有プール上をクリア
ALTER SYSTEM FLUSH SHARED_POOL;
※ 共有プールの断片化が酷く発生しているときは、
上記コマンドで共有プールをFLUSHすることで改善可能だそうです。

共有プールは、割り当てが小さかった場合等でも
エラーが発生するケースもあるので
そのときはサイズの見直し等も検討するといいかもしれません。









0 comments

【 コマンド 】 ファイル連結

テキストファイル2つを連結して、ひとつにしたい場合が多々あると思います。
以下のコマンドでも連結できるのでご参考ください。

下記の例は、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

0 comments

DBMS_OUTPUTで255文字以上の文字を表示する関数

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プロシージャが正常に完了しました。
 

0 comments