得到Pl / sql ora-00909错误,其中相同的代码不会给mysql带来任何错误

时间:2013-12-26 13:37:27

标签: sql oracle plsql

我有一个适用于mysql和php的页面,所以我试图在同一页面中使用oracle和php。我是pl / sql的新手,我遇到了问题。 (顺便说一句,代码适用于mysql)

我在下面的代码示例中遇到错误(ORA-00909),似乎有人可以告诉我什么问题?

concat(isnull(concat(sihe.V_1_INT, '~'), ''),
        isnull(concat(sihe.V_1_DOUBLE, '~'), ''),
        isnull(concat(sihe.V_1_DATE_1, '~'), ''),
        isnull(sihe.V_1_DATE_2, '')
       ) AS V_OBIS_CODE_VALUE_1,

编辑:mysql版本

concat(ifnull(concat(`sihe`.`fld_1_int`, '~'), ''),
            ifnull(concat(`sihe`.`fld_1_double`, '~'), ''),
            ifnull(concat(`sihe`.`fld_1_date_time_1`, '~'),
                    ''),
            ifnull(`sihe`.`fld_1_date_time_2`, '')) AS `fld_obis_code_value_1`,

1 个答案:

答案 0 :(得分:3)

您只能在Oracle CONCAT函数中传递两个参数,因此您收到此错误 oracle中也不支持isnull

在oracle中尝试下面的简单示例,因为oracle在内部将空字符串更改为Null,所以可以忽略空检查

sihe.v_1_int||'~'||v_1_double||'~'||v_1_date_1||'~'||v_1_date_2 
AS V_OBIS_CODE_VALUE_1

<强> EDIT1: -

通过使用COALESCE而不是IFNULL并且只使用两个参数的CONCAT,我们可以在MYSQL中使用以下代码和ORACLE link for testing

select concat(concat(concat(concat(concat(concat('string1','~'),
       COALESCE(null,'string2')),'~'),'string3'),'~'),
       'string4') from dual;