- PR -

ストアドの配列OUTパラメータの文字化けについて

1
投稿者投稿内容
beagle
会議室デビュー日: 2005/10/04
投稿数: 6
投稿日時: 2005-10-04 16:14
現在JAVAからPL/SQLを呼ぶプログラムを作成中です

ストアドからJAVAへ配列を渡しているのですが、
JAVAで取得し、表示した際にすべての文字が「???」と文字化けしてしまいます。

※配列の内容を文字列に編集しなおして渡すと文字化けはおこりません

なにか解決策をご存知の方がいらっしゃいましたら何卒ご教授ください


■環境
OS : Windows2000
DB : Oracle Database 10g Enterprise Edition Release 10.1.0.3.0
JDBC : Oracle JDBC Driver 10.1.0(thinを使用)
JDK : JDK 1.4.2_09

Javaからは以下のようにしてストアドを呼び出しています。

OracleCallableStatement ocs =
(OracleCallableStatement)conn.prepareCall("BEGIN PK_TEST.TEST(?, ?); END;");

ocs.registerOutParameter(1, OracleTypes.ARRAY, "T_TBL_RNAME");
ocs.registerOutParameter(2, Types.VARCHAR);

ocs.executeUpdate(); //プロシージャ実行

String[] RNameArray = (String[])ocs.getARRAY(1).getArray();
String ErrData = ocs.getString(2);

for(int i=0; i<RNameArray.length; i++){
System.out.println("配列  --->" + RNameArray[i]); //文字化け
}
System.out.println("文字列 --->" + ErrData); //文字化けしない

ストアドは以下のように作成しています

■TYPE
CREATE OR REPLACE TYPE T_TBL_RNAME AS TABLE OF CHAR(6)

■PACKAGE
CREATE OR REPLACE PACKAGE PK_TEST IS
PROCEDURE TEST(
O_T_RNAME OUT T_TBL_RNAME,
O_C_ErrDATA OUT VARCHAR2
);
END PK_TEST;

■PACKAGE BODY
CREATE OR REPLACE PACKAGE BODY PK_TEST IS
PROCEDURE TEST(
O_T_RNAME OUT T_TBL_RNAME,
O_C_ErrDATA OUT VARCHAR2
)IS
--変数定義
V_ErrData VARCHAR2(255);
N_ProcSuu NUMBER;

--配列
T_RNAME T_TBL_RNAME := T_TBL_RNAME();

--カーソル定義
CURSOR CUR_TEST IS
SELECT A.RIYOSYANAME AS RIYOSYANAME
FROM RIYOSYAMASTER A;

BEGIN
-- 初期処理
N_ProcSuu := 0;
V_ErrData := Null;

FOR REC_TEST IN CUR_TEST LOOP
T_RNAME.extend;
T_RNAME(T_RNAME.count) := REC_TEST.RIYOSYANAME;
V_ErrData := V_ErrData || ',' || T_RNAME(N_ProcSuu+1);
N_ProcSuu := N_ProcSuu + 1; --カウントアップ
END LOOP;

--OUTパラメータにセット
O_T_RNAME := T_RNAME; --文字化け
O_C_ErrDATA := V_ErrData; --文字化けしない

END TEST;
END PK_TEST;
らざるす
会議室デビュー日: 2002/11/15
投稿数: 11
投稿日時: 2005-10-04 17:27
私も現在同じような事をしていますが、PL/SQLを呼ぶJavaの部分はJPublisherを
使用しています。
JPublisherを使用してPL/SQLを実行したら同じように文字化けしますか?
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2005-10-04 22:01
特に関係無いかもしれませんが、下記の箇所
引用:
String[] RNameArray = (String[])ocs.getARRAY(1).getArray();


は、
コード:
String[] RNameArray = (String[])ocs.getArray(1);


では駄目なのでしょうか?
プロシージャ呼び出しには疎いので的外れでしたらご容赦ください。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2005-10-04 22:11
下記なんか参考になりますかね〜?
http://pukiwiki.postcle.com/zange/index.php?%C7%DB%CE%F3%A1%CAVARRAY%A1%CB%A4%CE%BC%F5%A4%B1%C5%CF%A4%B7
beagle
会議室デビュー日: 2005/10/04
投稿数: 6
投稿日時: 2005-10-05 12:01
みなさまありがとうございます。
無事解決いたしました。
原因はJDBCドライバのバージョンによるものでした。

>らざるす様
JPublisherという方法もあるんですね
また試してみたいと思います
1

スキルアップ/キャリアアップ(JOB@IT)