我想回答我的问题,因为迁移到 oracle 并不是那么简单,但是有一些技巧可以帮助任何人在 Windows 或 linux 上迁移到 oracle 而不那么头痛。
Sql 开发人员工具首先将 sqlserver 模式和数据迁移到 oracle,包括存储过程、约束、触发器等。
它还可以很好地进行数据类型映射,并在需要时提供重新映射数据类型的选项。
一些注意事项和注意事项。
Oracle 对存储过程名称的长度有大约 30 个字符的限制。这是您需要进行一些手动重命名的区域,因为迁移 SP 或名称大于 30 个字符的标识符可能会被截断。
您可能面临的另一个常见问题是日期插入和格式设置。您可以使用以下代码段来避免头痛。常见错误是“不是有效月份”。
OracleConnection conn = new OracleConnection(oradb); // C# conn.Open(); OracleGlobalization session = conn.GetSessionInfo(); session.DateFormat = "DD.MM.RR"; // 这里根据需要改变格式 conn.SetSessionInfo(session);
- 插入或更新数据或相关错误时,最烦人的错误是字符到数字的转换。
这里的问题是,当您将参数添加到 sql 提供程序的命令对象时,绑定按名称发生,但对于 Oracle.DataAccess,默认绑定是按位置。这是让我头疼的帖子。
uint 数据类型的 ODP .NET 参数问题
你可以做的是设置 command.BindByName = true;
- 当迁移返回数据的 SP 时,oracle 会创建一个 out 参数引用游标。在构造命令参数时需要注意这一点。
例如 OracleParameter refp = new Oracle.DataAccess.Client.OracleParameter("cv_1", OracleDbType.RefCursor, ParameterDirection.InputOutput);
command.Parameters.Add(refp);
此外,sqlserver 要求 SP 的参数以“@”为前缀,而 oracle 则不需要。这可以在您的数据层中轻松处理。
此外,由于 Oracle 中没有位数据类型,因此 number(1) 可以正常工作。如果需要,您可能需要将布尔值转换为数字。
希望这可以帮助某人避免迁移头痛。如果我遇到,我会发布更多问题。