我还是SQL的新手 . 我正在开发一个在开发中使用Derby数据库和在 生产环境 中使用Oracle的系统 . 我希望有一个适用于两者的SQL语句 . 这是我的代码:
SELECT rma.crspdt AS bic_crspndt,
rma.issr AS bic_issr
FROM rma
WHERE (rma.tp = 'Issued' OR rma.tp = 'Received')
AND rma.rmasts = 'Enabled'
AND rma.svcnm = 'swift.fin') r
INNER JOIN (SELECT 1 ID FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 2 ID FROM SYSIBM.SYSDUMMY1) dummy ON (dummy.id = 1 AND r.bic_crspndt IS NOT NULL)
OR (dummy.id = 2 AND r.bic_issr IS NOT NULL)
我在这里使用'SYSIBM.SYSDUMM1'表 . Oracle有一个名为'DUAL'的'SYSIBM.SYSDUMM1'的精确替代表 . 问题是,当我在开发(德比)中运行我的代码时,这段代码工作正常,但在 生产环境 (oracle)中,我得到一个错误,说像未知表 .
我想要做的是在我的代码中执行IF-ELSE / CASE-WHEN或类似的东西来检查运行时是否存在'SYSIBM.SYSDUMMY1'表并且如果它不存在(如在oracle中)那么我想要使用'DUAL'表 . 我是SQL的新手,想在这方面提供一些帮助 .
3 回答
你没有见过示威,但没有亲自使用它 . 我建议Oracle文档(像往常一样)获取信息 - https://docs.oracle.com/database/121/DRDAA/sql_transl_arch.htm#DRDAA131 .
你能不能只创建一个DUAL表
从Oracle的角度来看,您的代码存在一些问题,我可以想到 . 所以从评论中我得到的是你无法使用Dual . Oracle中存在双重身份 . 所以尝试运行
select 1 from dual
,如果它不起作用,你的查询肯定没有在oracle中运行 . 除此之外,您的查询还有一些问题 .使用内部连接之前的位置 .
r
的额外关闭括号根据以上输入,如果您在
Oracle
中运行此查询,则此查询可能适合您 . 如果您不使用Oracle,请将_2485795替换为dual .注意:您应该使用正确的连接语法(
INNER JOIN
) . 我无法弄清楚加入条件,因此我使用逗号加入 .