Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle apex APEX-从PL/SQL返回日期为的SQL查询时出错_Oracle Apex - Fatal编程技术网

Oracle apex APEX-从PL/SQL返回日期为的SQL查询时出错

Oracle apex APEX-从PL/SQL返回日期为的SQL查询时出错,oracle-apex,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

我不熟悉使用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: * & = - + ; < ...
没有成功。将字符串传递给变量并返回也没有区别的结果

我读过的所有文档都表明我的原创作品应该是可行的

有人知道在这个上下文中“decode”的语法是否不同(一个区域的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

为什么在引号之间加空格

尝试更改:

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

我认为这是因为:

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

返回相同的错误。

谢谢,但是根据我所读的内容,“”是正确的语法。错误消息更改为:ORA-06550:第6行,第32列:PLS-00103:在期望下列之一时遇到符号“01”…为了转义撇号,在“”之间不能有空格;它必须紧跟其后,否则Oracle假定字符串已结束。我原以为编译器会读:return“select…”。。。和(解码)(将“开始日期”作为字符串,然后遇到“01-JUN-12”。我发现了许多类似于以下内容的APEX PL/SQL示例:v_somevar:=“a string”“a string”“a string需要用单引号括起来的字符串”“该字符串的其余部分”“;但我还没有找到使用日期的示例。你能发布有效的实质性查询吗?v_somevar:=“a string”“a string”“;will引起一个错误。这些示例是误导性的。它们的意思是包含串联运算符| |,如下所示:v_somevar:='a string'| | |'a string';好的-我知道你是从哪里来的。那么,我如何说服PL/SQL编译器返回需要包含撇号的字符串呢?我没有尝试串联(显然!),但需要将返回的查询包含日期周围的撇号。已将完整查询作为编辑发布到我的原始帖子中。
sum(decode(START_DATE, ''01-JUN-12'', VALUE))
execute immediate 'select to_date(' '01-JUN-12' ') from dual';