2013-01-09 54 views
0

我是新来的使用APEX PL/SQL并提前道歉,如果我的问题已被覆盖。我相信已经彻底地寻找答案。APEX-返回SQL查询与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 selelcted目前仅适用,因此需要学习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

为了逃避撇号,在''之间不能有空格。它必须立即进行或Oracle假定字符串已结束。 –

+0

我以为编译器会这样读:return'select ... sum(decode(START_DATE,'as a string,then'01 -JUN-12')。我发现很多APEX PL/SQL示例类似于:v_somevar :='一个字符串''一个字符串需要用单引号''剩下的字符串';但是我还没有找到一个使用日期的例子 – user1964553