[PR]
Posted on Thursday, Apr 24, 2025 16:19
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
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プロシージャが正常に完了しました。
ORACLEのSTORED FUNCTIONを作成しSQLPLUS上で単体実行をする場合
Posted on Wednesday, Aug 19, 2009 14:18
下記を参考にしてください。
-------------------------------------
-- 関数名: FUNC_SAMPLE
-- 引数: なし
-- 戻り値: NUMBER
-------------------------------------
set serveroutput on
declare
a number;
begin
dbms_output.enable(1000000);
a := FUNC_SAMPLE();
dbms_output.put_line('RET: ' || TO_CHAR(a) );
dbms_output.put_line('
exception
when others then
dbms_output.put_line(SQLERRM(
end;
-----------------------------
KEYWORD : ORACLE STORED FUNCTION SP Oracle Stored Function
サンプル: 文字列を1文字ずつ抽出し表示する
Posted on Friday, Aug 15, 2008 18:25
------------------------------------------------------------------
■ SOURCE
------------------------------------------------------------------
set serveroutput on
DECLARE
vOrgChar varchar2(50);
nIndex number(10);
vCurChar varchar2(10);
BEGIN
vOrgChar:= 'aiueoかきくけこ';
FOR nIndex IN 1..length(vOrgChar) LOOP
vCurChar:=substr(vOrgChar, nIndex, 1);
dbms_output.put_line(vCurChar);
END LOOP;
END;
------------------------------------------------------------------
■ 実行結果
------------------------------------------------------------------
a
i
u
e
o
か
き
く
け
こ
PL/SQLプロシージャが正常に完了しました。
SQL>
------------------------------------------------------------------
■ 関数
------------------------------------------------------------------
FOR
SUBSTR
LENGTH
DBMS_OUTPUT.PUT_LINE