我有一个程序,它的数据库必须同时支持 Oracle 和 SQL Server。在某些时候,我必须执行一个查询,我想在 select 语句中连接 2 列。
在 SQL Server 中,这是使用 + 运算符完成的
select column1 + ' - ' + column2 from mytable
而oracle这是用concat完成的
select concat(concat(column1, ' - '), column2) from mytable
我正在寻找一种同时利用它们的方法,因此我的代码对两个数据库都有一个 SQL 查询文字字符串,并且我可以避免需要检查我连接到哪个 DBMS 的丑陋构造。
我的第一直觉是将不同的查询封装到一个存储过程中,这样每个 DBMS 都可以有自己的查询实现,但我无法在 Oracle 中创建像 SQL Server 那样返回记录集的过程。
更新:在 SQL Server 中创建 concat 函数不会使查询与 Oracle 兼容,因为 SQL Server 要求在调用函数时指定所有者:
select dbo.concat(dbo.concat(column1), ' - '), column2) from mytable
在 SQL Server 中创建自己的 concat 函数后,我花了一段时间才弄清楚。
另一方面,看起来 Oracle 中的一个函数SYS_REFCURSOR
不能用简单的方法调用
exec myfunction
并像在 SQL Server 中一样返回表。
最后,解决方案是在两个 RDBM 上创建一个名称相同但实现不同的视图,然后我可以select
在视图上做一个简单的操作。