我正在制作一张包含每个月收入的表格
为此,我使用了一个带有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
我在这里做错了什么?
答案 0 :(得分:1)
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>
...
我怀疑你可能用一个插入器而不是一个循环来做到这一点,但很难确定没有看到整个事情。