错误代码ORA-06550 - 麻烦连接Oracle中的字符串

时间:2013-07-05 23:17:17

标签: oracle date casting string-concatenation ora-06550

我正在制作一张包含每个月收入的表格 为此,我使用了一个带有insert语句的for循环。
我遇到的问题是将数字转换为一个月,然后转换为char。

这就是我的代码:

BEGIN  
FOR i IN 1..12   
LOOP  
    INSERT INTO REVENUE ( TO_CHAR(TO_DATE(i, 'MM'), 'MON') || '2009'  
    , select sum(transaction_amount)  

但是当我运行这个时,我得到一个错误说:

      INSERT INTO REVENUE ( TO_CHAR(TO_DATE(i, 'MM'), 'MON') || '2009'  
                                     *  
ERROR at line 4:
ORA-06550: line 4, column 31:
PL/SQL: ORA-00917: missing comma

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

go-oleg是对的,问题不在于串联,而是你的syntax for the insert statement错了。您缺少values子句中的values关键字:

BEGIN  
FOR i IN 1..12   
LOOP  
    INSERT INTO REVENUE VALUES ( TO_CHAR(TO_DATE(i, 'MM'), 'MON') || '2009'  
    , select sum(transaction_amount)
...  

或理想情况下指定要插入的列名称:

BEGIN  
FOR i IN 1..12   
LOOP  
    INSERT INTO REVENUE ( <column1>, <column2> )
    VALUES ( TO_CHAR(TO_DATE(i, 'MM'), 'MON') || '2009'  
    , select sum(transaction_amount)  
    ...

因为您没有values关键字,解析器认为括号包含列列表,因此当它看到to_char的下一个左括号时会感到困惑 - 错误是对于括号,如果它以ma tab开头,则为char 31,这也可以解释为什么标记错误位置的星号出现在错误的位置。它期望在列列表中以逗号作为分隔符。显然,除了“to_char”是否是一个有效的列名之外,还没有做到最好。

实际上你正在使用的第二个值的选择表明你可能正在尝试使用子查询版本;取决于你在该陈述的其余部分中做了什么,你可能想要:

BEGIN  
FOR i IN 1..12   
LOOP  
    INSERT INTO REVENUE ( <column1>, <column2> )
    SELECT TO_CHAR(TO_DATE(i, 'MM'), 'MON') || '2009'  
    , sum(transaction_amount)
    FROM <some other table>
    ...

我怀疑你可能用一个插入器而不是一个循环来做到这一点,但很难确定没有看到整个事情。