【发布时间】:2016-04-24 03:02:58
【问题描述】:
我正在(尝试)编写一个查询,它将在查询的多个点使用相同的日期。我想使用一个变量来更轻松地运行不同日期的查询。我该怎么做?当我尝试按原样执行查询时遇到各种错误。
ORA-06550:第 25 行,第 5 列: PLS-00103:在预期以下情况之一时遇到符号“END”:
DECLARE
CalendarDate Date := TO_DATE('1/20/2015','MM/DD/YYYY');
BEGIN
SELECT
TIME_OF_DAY, COUNT(TIME_OF_DAY) ISSUE_ACTIVITY_COUNT
FROM
(SELECT
case
when to_char(CREATED_DT,'mi') between '00' and '14' then TO_CHAR(trunc(CREATED_DT,'HH24') + interVal '15' minute,'HH24:MI')
when to_char(CREATED_DT,'mi') between '15' and '29' then TO_CHAR(trunc(CREATED_DT,'HH24') + interVal '30' minute,'HH24:MI')
when to_char(CREATED_DT,'mi') between '30' and '44' then TO_CHAR(trunc(CREATED_DT,'HH24') + interVal '45' minute,'HH24:MI')
when to_char(CREATED_DT,'mi') between '45' and '59' then TO_CHAR(trunc(CREATED_DT,'HH24') + interVal '60' minute,'HH24:MI')
end as TIME_OF_DAY
FROM
CE.ISSUE_ITEM i
WHERE
(TRUNC(i.CREATED_DT) = CalendarDate))
GROUP BY
TIME_OF_DAY
ORDER BY
TIME_OF_DAY;
EXECUTE IMMEDIATE
END;
【问题讨论】:
-
“立即执行”构造执行动态sql,您使用的语法错误。 docs.oracle.com/cd/B19306_01/appdev.102/b14261/…。您的代码的最终目标是什么?
-
您要对过程中的 SELECT 语句做什么?正如@bdn02 所指出的,
EXECUTE IMMEDIATE是 A) 在错误的位置,并且 B) 没有必要,因为这里没有使用动态 SQL。您是否尝试在过程中的 SELECT 语句上打开一个游标并返回它?您是否尝试在查询工具中执行此 SELECT 语句并显示结果?或者是其他东西..?请编辑您的问题并添加进一步的解释。谢谢。 -
另外,如果这是动态 SQL,您需要为内联视图设置别名。大多数 PL/SQL 不喜欢无别名的内联视图。与 t-SQL 不同的是,PL/SQL 需要创建一个 refcursor.or sysrefcursor 来返回一个记录集,我认为这就是你想要做的。stackoverflow.com/questions/2153053/…
标签: sql variables select plsql