[Seasar-user:17252] Re: [S2JDBC]OracleプロシジャでNUMBER型NULLの受け取り

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 4月 13日 (月) 20:20:30 JST


小林 (koichik) です.

Date:    Mon, 13 Apr 2009 17:38:01 +0900
From:    k wazze <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17250] [S2JDBC]OracleプロシジャでNUMBER型NULLの受け取り

> Oracle のストアドプロシジャを呼び出していますが、
> NUMBER型のOUT引数にNULL値を復帰すると、
>   ・Integer型で受け取ると 0 になってしまう
>   ・BegDecimal等で受け取ると、ちゃんと nullになる
>   ・ResultSet の要素として受け取る場合は、Integer でも null になる
> という現象が発生しています。
> Integer でも null で受け取る方法があるのでしょうか?

既存のテストケースを利用してこちらで試したところ,
Integer でも null を受け取りました.


・ストアド
http://svn.seasar.org/browse/trunk/s2jdbc-it/sql/create_oracle.sql?root=s2container&view=markup

CREATE OR REPLACE PROCEDURE PROC_DTO_PARAM
( param1 IN NUMBER
, param2 IN OUT NUMBER
, param3 OUT NUMBER
) AS
BEGIN
  param2 := param2 + param1;
  param3 := param1;
  NULL;
END PROC_DTO_PARAM;

・Dto とテストケース

http://svn.seasar.org/browse/trunk/s2jdbc-it/src/test/java/org/seasar/extension/jdbc/it/auto/AutoProcedureCallTest.java?root=s2container&view=markup

    public static class MyDto {

        /** */
        public Integer param1;

        /** */
        @InOut
        public Integer param2;

        /** */
        @Out
        public Integer param3;
    }


    public void testParameter_dto_null() throws Exception {
        MyDto dto = new MyDto();
        dto.param1 = null;
        dto.param2 = 5;
        jdbcManager.call("PROC_DTO_PARAM", dto).execute();
        assertNull(dto.param1);
        assertNull(dto.param2);
        assertNull(dto.param3);
    }

・テスト結果

https://www.seasar.org/hudson/job/s2container-2.4-s2jdbc-it/288/database=oracle,jdk=JDK-1.6/testReport/org.seasar.extension.jdbc.it.auto/AutoProcedureCallTest/


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内