从SQLServer语法到Oracle

时间:2014-09-04 14:41:41

标签: sql sql-server oracle

我一直在玩这个查询已经有一段时间了,但我似乎无法让它在Oracle数据库中运行。我使用的SQLServer语法至少与SQLServer 2008一起使用(不了解早期版本)。

INSERT INTO WELCOME_PAGE_ITEMS
SELECT (SELECT COALESCE(MAX(ID), 0) + 1 FROM WELCOME_PAGE_ITEMS),
     'panel-' + (SELECT CAST(COALESCE(MAX(ID), 0) + 1 AS VARCHAR(20))
                   FROM WELCOME_PAGE_ITEMS),
     1,
     (SELECT COUNT(PREFERED_ORDER) + 1
        FROM WELCOME_PAGE_ITEMS
       WHERE PREFERED_POSITION = 1),
     0,
     0,
     'Custom Portlet',
     1,
     1,
     3,
     0

它给我带来了COALESCE函数以及'panel'+X的字符串连接的问题。

提前致谢

1 个答案:

答案 0 :(得分:0)

您的查询中有几个小问题:

  • Oracle中的字符串连接运算符为||(如@yamny所述)
  • (假设ID为数字)使用to_char()将数字转换为字符串而不是CAST

应该让你前进的小例子(DUAL只是我用于数据生成的虚拟表 - Oracle总是需要一个表到SELECT来自:)

with welcome_page_items(id) as (
  select cast(null as number) from dual
)
SELECT 'panel-' || to_char(coalesce(max(id), 0) + 1)
FROM welcome_page_items