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
감사합니다. 그러나 '올바른 구문은 내가 읽은 것입니다. 오류 메시지가 다음으로 변경됩니다. ORA-06550 : 6 행 32 열 : PLS-00103 : 다음 중 하나가 예상되면 "01"기호가 나타납니다. – user1964553
아포스트로피를 피하기 위해 ''와; 사이에 공백이 없어야합니다. 즉시 따라야합니다. 그렇지 않으면 오라클은 문자열이 끝났다고 가정합니다. –
나는 컴파일러가 읽을 것이라고 생각했을 것이다. return 'select ... sum (decode (START_DATE,'문자열로 다음에 '01 -JUN-12 '가 발생한다.) 비슷한 APEX PL/SQL 예제를 많이 발견했다. v_somevar : = '문자열' '작은 따옴표로 묶어야하는 문자열' '나머지 문자열'; 그러나 날짜를 사용한 예제를 찾지 못했습니다. – user1964553