C#ORA-06502中的存储过程

本文关键字:存储过程 C#ORA-06502 | 更新日期: 2023-09-27 18:27:12

存储过程:

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();
                }
            }
        }
    }
}

C#ORA-06502中的存储过程

我不得不添加

尺寸=16

到OracleParameter。