【发布时间】:2016-05-29 10:12:53
【问题描述】:
我正在使用需要动态 sql 查询的 apex 环境。 Apex 在“经典报告(基于函数)”的帮助下提供了这个 api。我希望您注意第 8 行。当我将间距粘贴到 stackoverflow 时,我的应用会弄乱间距。现在的问题是我收到错误“ORA-01008: not all variables bound”这很有趣,因为当我将第 8 行中的 :TEAM_SELECTOR 更改为“MYSQL”(这是一个团队名称)行时此代码可以正常工作。请注意,在返回的查询中也使用 :TEAM_SELECTOR 没有问题。我也在使用 APEX 5。
DECLARE
v_time INT;
v_start_time int;
v_end_time int;
v_rownum int := 1;
v_max_shifts int;
v_location INT;
v_P4_team_selector varchar2(30) := :TEAM_SELECTOR;
BEGIN
select extract(hour from CAST(sysdate AS TIMESTAMP)) into v_time from dual;
select count(*) into v_max_shifts from oncall_shift
where team = v_P4_team_selector;
FOR i IN 0..v_max_shifts
LOOP
select start_time into v_start_time from (select * from oncall_shift where team =v_P4_team_selector)
where rownum = v_rownum;
select end_time into v_end_time from (select * from oncall_shift where team =v_P4_team_selector)
where rownum = v_rownum;
v_rownum := v_rownum + 1;
if v_time >= v_start_time and v_time <= v_end_time
then
select location into v_location from oncall_shift
where team = v_P4_team_selector
and start_time = v_start_time
and end_time = v_end_time;
return '
SELECT E.FNAME "First Name",E.LNAME "Last Name",E.OFFICE_NUM "Office Number", E.MOBILE_NUM "Mobile Number",L.NAME Location, o.position "Primary/Secondary"
FROM EMPLOYEE E, LOCATION L, ON_CALL O
WHERE E.ID = O.EMP_ID
AND L.ID = O.LOC_ID
AND O.ONCALL_DATE=TRUNC(SYSDATE)
AND O.TEAM=:TEAM_SELECTOR
AND L.ID = ' || v_location ||
' ORDER BY l.name asc
';
EXIT;
END IF;
END LOOP;
END;
【问题讨论】:
-
您如何声明值并将其绑定到 TEAM_SELECTOR?并且在返回中它是字符串文字的一部分,因此无论使用该生成的语句如何在执行时绑定该值本身(如果发生了这种情况)。
-
你在哪里声明这段代码?您可能没有在名为“要提交的页面项目”的字段中声明 TEAM_SELECTOR
-
我认为这与此无关,因为即使我将 TEAM_SELECTOR 放入“要提交的页面项目”中,它仍然会抛出变量未绑定错误。我还尝试使用同一页面上的页面中的顶点项目,但仍然无法正常工作。这与我在其他页面中引用 TEAM_SELECTOR 而没有错误的其他代码一致,因为在这个基于函数的经典报告中似乎没有任何顶点项目起作用。
-
你试过直接使用
:TEAM_SELECTOR而不是赋值给变量吗? -
TEAM_SELECTOR是什么?是页面还是应用项?
标签: mysql oracle oracle-apex oracle-apex-5 ora-01008