1

Oracle10gデータベースのTESTというOracleパッケージ内に関数があります

FUNCTION GetEname(P_ename IN VARCHAR2) RETURN VARCHAR2 AS
retVal VARCHAR2(10);
BEGIN
retVal := SUBSTR(P_ename, 3, INSTR(P_ename, ':', 1, 2) - 3);

RETURN RetVal;

END GetEntDefIEIDFromEname;

ASP.netページを作成し、page_loadに次のコードがあります。

String strResult = "";
        try
        {   
            oracleConn.ConnectionString = ConfigurationManager.ConnectionStrings["OracleDatabase"].ConnectionString;
            oracleConn.Open();
            OracleCommand orclCmnd = new OracleCommand();
            orclCmnd.Connection = oracleConn;
            orclCmnd.CommandText = "TEST.GetEname";
            orclCmnd.CommandType = CommandType.StoredProcedure;

            OracleParameter ename = new OracleParameter();
            ename.ParameterName = "ename";
            ename.OracleType = OracleType.VarChar;
            ename.Direction = ParameterDirection.Input;
            ename.Value = "0:490330";
            orclCmnd.Parameters.Add(ename);

            strResult = (String)orclCmnd.ExecuteOracleScalar();

            oracleConn.Close();
            oracleConn.Dispose();

            lbl1.Text = "Result of  " + strResult;
        }                
        catch (Exception ex)
        {
            Console.Out.WriteLine(ex.ToString());
            oracleConn.Close();
        }

コードを実行すると、次のエラーメッセージが表示されます。

"ORA-06550:行1、列7:\ nPLS-00306:'GETENAME'の呼び出しで引数の数またはタイプが正しくありません\nORA-06550:行1、列7:\ nPL / SQL:ステートメントが無視されました\ n"} System.Exception {System.Data.OracleClient.OracleException}

4

1 に答える 1

6

コード内のパラメーターに別の名前を使用しています。変更してみる

ename.ParameterName = "ename";

ename.ParameterName = "P_ename";

また

出力値のパラメーターを追加する必要があります。

OracleParameter result = new OracleParameter();
result.OracleType = OracleType.VarChar;
result.Direction = ParameterDirection.ReturnValue;
orclCmnd.Parameters.Add(result);

ExecuteNonQuery で関数を呼び出した後、パラメータから値を取得します。

orclCmnd.ExecuteNonQuery();
strResult = result.Value.ToString();
于 2012-07-10T19:08:50.013 に答える