我正在构建一个Oracle APEX应用程序,在该应用程序中,记者可以将文章(导演为广播选择文章)与新闻阅读器(如果创建了广播就可以阅读文章)一起输入。我被困在以下几个方面:
我想要创建一个Oracle查询,当它的可用性(存储在另一个表“Beschikbaarheid”中)满足给定情况(用户开始时间在广播日>=广播开始时间,用户结束时间在广播日<=广播结束时间)时,选择" user“表中记录的名称和姓氏。我自己写了以下查询。
SELECT voornaam || ' ' || achternaam AS display_value, id AS return_value
FROM Gebruiker
WHERE id NOT IN (SELECT Nieuwslezerselectie.nieuwslezerid FROM Nieuwslezerselectie
WHERE -- other conditions
AND id IN (SELECT gebruikerid
FROM Beschikbaarheid
WHERE (dag = to_char(to_date(:P91_DATUM,'DD-MON-YYYY'),'Day'))
AND (to_date(:P91_BEGINTIJD,'HH24:MI') >= to_date(begintijd,'HH24:MI'))
AND (to_date(:P91_EINDTIJD,'HH24:MI') <= to_date(eindtijd,'HH24:MI'))
);(对不起,如果你读这个有困难,我用荷兰语命名。)你可以随便问问是否有什么不清楚。)
但是,如果广播时新闻阅读器可用,则链接此查询的APEX选择列表将不会显示任何内容。我认为问题是"Begintijd“和"Eindtijd”存储为时间戳,因为值应该与日期无关(而时间戳不是),但我不知道如何存储它们。也许是个怪胎?
我真诚地希望你有什么想法。提前谢谢你!
Luc
更新1
在我已经重写了查询的帮助下,它现在看起来如下:
AND id IN (SELECT gebruikerid
FROM Beschikbaarheid
WHERE (dag = to_char(to_date(:P91_DATUM,'DD-MON-YYYY'),'Day','NLS_DATE_LANGUAGE=Dutch'))
AND (
to_date('01-01-2000' || ' ' || to_char(to_timestamp(:P91_BEGINTIJD),'HH24:MI'),'DD-MM-YYYY HH24:MI')
BETWEEN
to_date('01-01-2000' || ' ' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
AND
to_date('01-01-2000' || ' ' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
)
AND (
to_date('01-01-2000' || ' ' || to_char(to_timestamp(:P91_EINDTIJD),'HH24:MI'),'DD-MM-YYYY HH24:MI')
BETWEEN
to_date('01-01-2000' || ' ' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
AND
to_date('01-01-2000' || ' ' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
)
);但是,我现在得到的ORA-01840:输入值不足以在尝试访问页面时出现日期格式错误。我还没有发现是什么导致了这个错误。有人有线索吗?
更新2
现在我很困惑。原来我的页面变量不需要to_char等,所以我删除了这些变量(to_char等)。现在我通常被发送到正确的页面,但我在上一页“设置这些项/使用这些值”文本字段中输入的最后一个值不是send。以下是我现在在这些文本字段中的内容:

在这个图像中,P85_BEGINTIJD不是发送的。我也改变了价值观,但这并没有什么区别。您可以通过请求或其他东西发送的值的数量是否有限制?
发布于 2015-10-19 11:36:24
好吧,最后,我解决了。在我的上一次更新中,唯一持久的问题是一些变量没有发送到下一页。我找不到问题的根本原因,所以我做了一个解决办法。
通常发送到下一页的唯一变量是P91_UITZENDING (Uitzending的PK )。幸运的是,我需要的其他变量( eindtijd、eindtijd和datum)是Uitzending的属性,因此我能够在相应页面项的源代码中使用如下语句派生它们:
SELECT to_char(begintijd,'HH24:MI')
-- replace with eindtijd for eindtijd, and for date: to_char(datum,'DD-MON-YYYY')
FROM Uitzending
WHERE id = :P91_UITZENDING以及选中框的最后SQL查询:
SELECT voornaam || ' ' || achternaam AS display_value, id AS return_value
FROM Gebruiker
WHERE -- Other statements
AND id IN (SELECT gebruikerid
FROM Beschikbaarheid
WHERE (dag = to_char(to_date(:P91_DATUM,'DD-MON-YYYY'),'fmDay','NLS_DATE_LANGUAGE=Dutch'))
AND (
to_date('01-01-2000' || :P91_BEGINTIJD,'DD-MM-YYYY HH24:MI')
BETWEEN
to_date('01-01-2000' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
AND
to_date('01-01-2000' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
)
AND (
to_date('01-01-2000' || :P91_EINDTIJD,'DD-MM-YYYY HH24:MI')
BETWEEN
to_date('01-01-2000' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
AND
to_date('01-01-2000' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
)
);我仍然不知道为什么eindtijd、eindtijd和datum没有以正常的方式发送,但至少它现在起作用了。
谢谢大家的思考和帮助!
https://stackoverflow.com/questions/33158091
复制相似问题