2013-07-05 9 views
0

각 달의 수입이 들어있는 표를 만들고 있습니다.
이렇게하려면 내부에 insert 문이있는 for 루프를 사용하고 있습니다.
내가 문제가되는 것은 숫자를 한 달로 변환 한 다음 char로 변환하는 것입니다.오류 코드 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

은'INSERT INTO REVENUE VALUES (... ')로 설정해야합니다. (... –

+0

나는 꽤 바보 같아서 이것을 게시 한 후에 구문이 잘못되었다는 것을 알았습니다 ... – Schuyler

답변

1

go-oleg가 맞습니다. 연결 문제가 아니며, syntax for the insert statement이 잘못되었습니다. 당신이 파서가 있다고 생각하는 values 키워드를 가지고 있지 않기 때문에

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) 
    ... 

: 당신에 삽입하고 열 이름을 지정 이상적으로

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

나 : 당신은 값 절에서 values 키워드를 누락 괄호가 열 목록을 둘러싸고 있으므로 다음과 같은 여백을 to_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> 
    ... 

을 당신이 아마 루프보다 하나의 insertnrather으로,하지만 열심히해야하는 것을 할 수있는 생각 전체를 보지 않고 맡은 일.