APEX - 从PL / SQL返回带有日期的SQL查询时出错

时间:2013-01-09 20:58:02

标签: oracle-apex

我是新手使用APEX PL / SQL并提前道歉,如果我的问题已被涵盖。我相信已经找到了答案。

我有一个标准查询,它与区域的源完全一样,但需要转换为PL / SQL,因此我可以处理从我要添加的传送返回的LOV。

这是工作查询的关键部分:

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

from ... (a substantial query that works)

当我尝试从PL / SQL块返回时:

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;

我收到错误消息:

(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源),或者我在这里错过了一些明显的东西?

所有建议都表示赞赏。

干杯, 杰森

===========

按要求添加完整查询。注意这一行

and METRIC_COLLECTION.METRIC_COLLECTION_ID IN :P44_COLLECTION_SELECTOR)

目前仅在名为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

1 个答案:

答案 0 :(得分: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';

返回相同的错误。