2013-07-05 55 views
0

我在制作一个包含每个月收入的表。
要做到这一点,我正在使用for循环与内部的插入语句。
我遇到的麻烦是将数字转换为一个月,然后转换为字符。错误代码ORA-06550 - 在Oracle中麻烦连接字符串

这是我的代码如下所示:

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 

我在做什么错在这里?

+2

应插入收入值(...' –

+0

我觉得很愚蠢,我注意到,我做了错误的语法只是发布后... ... – Schuyler

回答

1

go-oleg是正确的,它不是连接问题,而是您的syntax for the insert statement错误。你缺少从值子句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标签开头,则为字符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> 
    ... 

我怀疑你也许可以做到这一点与单insertnrather比一个循环,但很难确定没有看到整事情。