2013-01-09 2 views
0

APEX PL/SQL을 처음 사용하고 제 질문에 이미 사과 하셨다면 사과드립니다. 저는 믿기 힘들 정도로 답을 찾았습니다.APEX - PL/SQL에서 날짜가있는 SQL 쿼리를 반환하는 중 오류가 발생했습니다.

표준 쿼리를 지역 소스로 사용해야하지만 PL/SQL로 변환해야하므로 추가 할 셔틀에서 반환 된 LOV를 처리 할 수 ​​있습니다.

이 작업 쿼리의 중요한 부분입니다 :

:
BEGIN 
return 'select METRIC_DEFINITION_ID, 
     METRIC_NAME, 
     sum(decode(START_DATE, ' '01-JUN-12' ', VALUE)) as "Jun 2012" 

     from ... (a substantial query that works)'; 
END; 

내가 오류 메시지가 나타납니다 : 나는 PL/SQL 블록에서이를 반환하려고

select METRIC_DEFINITION_ID, 
     METRIC_NAME, 
     sum(decode(START_DATE, '01-JUN-12', VALUE)) as "Jun 2012" 

from ... (a substantial query that works) 

(ORA-06550: line 9, column 33: PLS-00103: Encountered the symbol "01-JUN-12" 
when expecting one of the following: * & = - + ; < ... 

마치 컴파일러가 운영자를 기다리는 것과 같습니다.

내가 성공하지

...TO_DATE(' '01-JUN-12' ')... 

을 시도했습니다. 문자열을 변수에 전달하고 리턴하면 차이가 없습니다.

내가 읽은 모든 문서는 내 원본이 작동해야한다고 제안합니다.

이 컨텍스트 (지역의 APEX 소스)에 대해 '디코드'에 대한 다른 구문이 있는지 아는 사람이 있습니까? 아니면 여기에 눈에 띄게 분명한 내용이 누락되어 있습니까?

모든 제안을 환영합니다.

건배, 제이슨 전체 쿼리를 추가

===========

, 요청에 따라. 하나의 항목이 셔틀라는 이름의 P44_COLLECTION_SELECTOR에 selelcted 경우

and METRIC_COLLECTION.METRIC_COLLECTION_ID IN :P44_COLLECTION_SELECTOR) 

는 현재 작동 라인을, PL/SQL을 배울 따라서 필요합니다.

날짜는 장기 실행의 입력을 기반으로합니다. 이것은 POC입니다.

select 
METRIC_DEFINITION_ID, 
    METRIC_NAME, 
    sum(decode(START_DATE, '01-JUN-12', VALUE)) as "Jun 2012", 
    sum(decode(START_DATE, '01-JUL-12', VALUE)) as "Jul 2012", 
    sum(decode(START_DATE, '01-AUG-12', VALUE)) as "Aug 2012", 
    sum(decode(START_DATE, '01-SEP-12', VALUE)) as "Sep 2012", 
    sum(decode(START_DATE, '01-OCT-12', VALUE)) as "Oct 2012", 
    sum(decode(START_DATE, '01-NOV-12', VALUE)) as "Nov 2012" 

from 

(select 
METRIC_DEFINITION.METRIC_DEFINITION_ID as METRIC_DEFINITION_ID, 
METRIC_DEFINITION.METRIC_NAME as METRIC_NAME, 
METRIC_VALUE.START_DATE as START_DATE, 
METRIC_VALUE.VALUE as VALUE 
from  
METRIC_VALUE METRIC_VALUE, 
METRIC_DEFINITION METRIC_DEFINITION 
where 
METRIC_DEFINITION.METRIC_DEFINITION_ID=METRIC_VALUE.METRIC_DEFINITION_ID) 

where METRIC_DEFINITION_ID IN 

(select 
METRIC_COLLECTION_MAP.METRIC_DEFINITION_ID as METRIC_DEFINITION_ID 
from  METRIC_COLLECTION_MAP METRIC_COLLECTION_MAP, 
METRIC_COLLECTION METRIC_COLLECTION 
where 
METRIC_COLLECTION.METRIC_COLLECTION_ID=METRIC_COLLECTION_MAP.METRIC_COLLECTION_ID 

and 
METRIC_COLLECTION.METRIC_COLLECTION_ID IN :P44_COLLECTION_SELECTOR) 

group by METRIC_DEFINITION_ID, METRIC_NAME 

답변

0

따옴표 사이에 공백을 넣은 이유는 무엇입니까?

을 변경해보십시오 :

sum(decode(START_DATE, ' '01-JUN-12' ', VALUE)) 

에 :

sum(decode(START_DATE, ''01-JUN-12'', VALUE)) 

나는 그림이 있기 때문에 :

execute immediate 'select to_date(' '01-JUN-12' ') from dual'; 

이 같은 오류를 반환합니다.

+0

감사합니다. 그러나 '올바른 구문은 내가 읽은 것입니다. 오류 메시지가 다음으로 변경됩니다. ORA-06550 : 6 행 32 열 : PLS-00103 : 다음 중 하나가 예상되면 "01"기호가 나타납니다. – user1964553

+0

아포스트로피를 피하기 위해 ''와; 사이에 공백이 없어야합니다. 즉시 따라야합니다. 그렇지 않으면 오라클은 문자열이 끝났다고 가정합니다. –

+0

나는 컴파일러가 읽을 것이라고 생각했을 것이다. return 'select ... sum (decode (START_DATE,'문자열로 다음에 '01 -JUN-12 '가 발생한다.) 비슷한 APEX PL/SQL 예제를 많이 발견했다. v_somevar : = '문자열' '작은 따옴표로 묶어야하는 문자열' '나머지 문자열'; 그러나 날짜를 사용한 예제를 찾지 못했습니다. – user1964553

관련 문제