ODP.NETで、ストアド関数を実行して結果を取得する

https://docs.oracle.com/cd/E16338_01/win.112/b61359/demo.htm#CEGBHEDF
`oCmd.CommandType = CommandType.StoredProcedure`にしろと書いてあることが多いがそれだと引数渡しがうまくいかないので以下コードを使った。

Imports Oracle.DataAccess.Client

(略)

Dim oCon = New OracleConnection()

oCon.ConnectionString = "User Id=scott; Password=tiger; Data Source=sample"
oCon.Open()

Dim oCmd = New OracleCommand("declare ret varchar2(512); begin :ret :=SampleFunction('hoge'); End;", oCon)
Dim oRet As New OracleParameter("ret", OracleDbType.Varchar2, 512)
oRet.Direction = ParameterDirection.ReturnValue
oCmd.Parameters.Add(oRet)

oCmd.ExecuteNonQuery()

MessageBox.Show("戻り値=" & oRet.Value.ToString())

oCon.Close()