C#ORA-06502中的存储过程

时间:2015-12-16 15:08:25

标签: c# oracle stored-procedures plsql

存储过程:

CREATE OR REPLACE PROCEDURE userById (
  username OUT account.username%TYPE
)
IS 
BEGIN
  SELECT username
  INTO username
  FROM account
  WHERE id = 1;
END;

当我运行上述存储过程时,c#会抛出ORA-06502错误。

当我在SQL Developer中执行存储过程时,我得到了一个结果。

控制台应用

安装了NuGet Oracle.ManagedDataAccess包。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.ManagedDataAccess.Client;

namespace Stored_Procedure_Oracle
{
    class Program
    {
        static void Main(string[] args)
        {
            var conn = new OracleConnection("Data Source=127.0.0.1:1521/orcl;User Id=user;Password=password;");
        string user;

            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "userById"; // StoredProcedure name

                cmd.Parameters.Add(new OracleParameter()
                {
                    ParameterName = "User",
                    Direction = ParameterDirection.Output,
                    OracleDbType = OracleDbType.Varchar2
                });

                cmd.ExecuteReader();

                if (cmd.RowSize > 0)
                {
                    user = cmd.Parameters["User"].ToString();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我必须添加

尺寸= 16

到OracleParameter。