納得できない。ODPでoracleストアドをキックするときのvarchar2の扱い

varchar2型の戻りがストアドに存在するとき。
入れるときがどうとかはまだわかんない。あとでやる。
実行対象ストアドは以下の通り

CREATE OR REPLACE PROCEDURE GETNAME
(
   v_EMPNO IN number,
   v_ENAME out varchar2,
   v_COUNT out number)
IS
BEGIN
 SELECT ENAME INTO v_ENAME FROM EMP WHERE EMPNO = v_EMPNO;
        SELECT count(*) INTO v_COUNT FROM EMP WHERE EMPNO = v_EMPNO;
END;

numberを入れてvarchar2型とnumber型を返すプロシージャです。
コレをVB.netから使用する際には

'コネクションまで
        oraCon.ConnectionString = ("User ID=id; Password=pass; Data 
Source=接続しる;")
        Dim cmd As New OracleCommand()
        oraCon.Open()

'コマンドに登録
        cmd.CommandText = "GETNAME"
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Connection = oraCon
        cmd.BindByName = True 

'パラメータの登録
    'NUMBER型のinputの場合はセオリーどおりinputとしてパラメータ作成すればOKです。
        Dim p1 As OracleParameter = New OracleParameter("v_EMPNO", 
OracleDbType.Int16)
        p1.Value = 7369
        p1.Direction = ParameterDirection.Input
        cmd.Parameters.Add(p1)

    'varchar型のoutput型はinputoutput型として作成し、かつdummyな文字列を入れておかないとキックする段でエラーになります。
        Dim p2 As OracleParameter = New OracleParameter("v_ENAME", 
OracleDbType.Varchar2)
        p2.Direction = ParameterDirection.InputOutput 'まず、outputがただとだめ。
        p2.Value = ""  '空文字でもエラー
        p2.Value = "dummy文字" 'ちなみにこの文字数がvarchar2戻りの限界長
        cmd.Parameters.Add(p2)

        'NUMBER型のoutputもセオリーどおりでOKです。
        Dim p3 As OracleParameter = New OracleParameter("v_COUNT", 
OracleDbType.Int16)
        p3.Direction = ParameterDirection.Output
        cmd.Parameters.Add(p3)

        cmd.ExecuteNonQuery()
        MessageBox.Show(p2.Value.ToString)
        MessageBox.Show(p3.Value.ToString)

NUMBER型のときは普通にやれば動いてくれるのだけど
VARCHAR2型の時はとりあえずinputoutputでdirectionを決めて
かつ空文字以外を入れないといけないらしい。dummy文字列の長さが戻りの限界長。size指定すれば初期値はいらないけどな。
くそだろ。。。くそだと思った。
要するにこういう事。サイズ指定が必要

        Dim p2 As OracleParameter = New OracleParameter("v_ENAME", OracleDbType.Varchar2)
        p2.Direction = ParameterDirection.Output 
        p2.size = 200
        cmd.Parameters.Add(p2)

varcharのinputは問題なく。と言うかインプットに指定している時点でry)