sql-server - Oracle 将空字符串视为 NULL,而 SQL Server 则不然 - 如何最好地处理这种情况?

标签 sql-server oracle

我必须编写一个组件来在 Oracle 数据库中重新创建 SQL Server 表(结构和数据)。该组件还必须获取输入 Oracle 数据库的新数据并将其复制回 SQL Server。

将数据类型从 SQL Server 转换为 Oracle 不是问题。然而,Oracle 和 SQL Server 之间的一个关键差异引起了严重的头痛。 SQL Server 认为空白字符串 ("") 与 NULL 值不同,因此 char 列可以定义为 NOT NULL 并但数据中仍包含空白字符串。

Oracle 认为空白字符串与 NULL 值相同,因此如果 char 列定义为 NOT NULL,则无法插入空白字符串。每当 NOT NULL 字符列在原始 SQL Server 数据中包含空白字符串时,这都会导致我的组件中断。

到目前为止,我的解决方案是不在我的任何镜像 Oracle 表定义中使用 NOT NULL,但我需要一个更强大的解决方案。这必须是一个代码解决方案,因此答案不能是“使用某某的 SQL2Oracle 产品”。

你会如何解决这个问题?

编辑:这是迄今为止我提出的唯一解决方案,它可能有助于说明问题。因为 Oracle 不允许在 NOT NULL 列中使用“”,所以我的组件可以拦截来自 SQL Server 的任何此类值并将其替换为“@”(仅作为示例)。

当我向 Oracle 表中添加新记录时,如果我确实想插入“”,我的代码必须编写“@”,并且当我的代码将新行复制回 SQL Server 时,它必须拦截“@”,而不是写“”。

我希望有一种更优雅的方式。

编辑2:是否有可能有一个更简单的解决方案,例如Oracle中的某些设置,可以使其像所有其他主要数据库一样对待空白字符串?此设置在 Oracle Lite 中也可用吗?

最佳答案

我没有看到一个简单的解决方案。

也许您可以将值存储为一个或多个空白 -> ' '(在 Oracle 中这些值不是 NULL),或者通过额外的字段/表和适配器来跟踪这种特殊情况层。

关于sql-server - Oracle 将空字符串视为 NULL,而 SQL Server 则不然 - 如何最好地处理这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/160904/

相关文章:

c# - WAITFOR RECEIVE 结果偏移/延迟 1 个结果

sql-server - T-SQL 根据输入参数的值使用不同的 WHERE 子句

oracle - 我们如何在PL SQL中在特定时间后自动删除表行

c# - Oracle Entity Framework 自动增量?

sql-server - 如何将数据包含在 DacPac 中

sql - 优化子串sql查询

sql-server - 将 SSIS/SSAS TargetServerVersion 设置为 2017,从 2012 开始 - 绕圈子

java - 无法使用 JDBC 连接远程 oracle 数据库

java - 如何在oracle数据库中插入BigInteger值

sql - Oracle中的 "NUMBER"和 "NUMBER(*,0)"是否相同?