【发布时间】:2019-07-29 23:08:16
【问题描述】:
我有一个动态生成的 plsql 区域,在其中,我有一堆动态生成的项目,一些是 popup_from_query,而那些有一个存储在基础表中的查询。但是它们也使您可以只输入返回值。所以现在我需要以某种方式检查您输入的值是否在 LOV 中。
所以我在验证中添加了一些代码(有些还有额外的条件,所以我检查了这些)。我创建了一个返回相关 LOV 的函数,但改写为这样的:
SELECT id --this is always the name of the column containing return value
FROM ( select something id, --this is the return value
something_else name --display value
from table
WHERE conditions)
WHERE id= :param;
这从 lov 中选择返回列,其中的值等于我们输入的值,因此如果输入的值在 LOV 中,则返回输入的值,如果不是有效值则返回任何内容。
IF checking_lov THEN
a_lov := function_that_returns_an_sql_query;
DECLARE
x VARCHAR2(100);
BEGIN
EXECUTE IMMEDIATE
a_lov
INTO x
USING apex_application.g_f02(i); --value of parameter
EXCEPTION
WHEN no_data_found THEN
x := NULL;
END;
IF x IS NULL THEN
display_error; --I do stuff here to display error, not important to you
END IF;
END IF;
但我似乎无法让它工作。 APEX 没有发现代码有任何问题,它编译时没有错误。但是当我尝试它时,它会抛出一个“无效字符”错误,并且验证通过。我可能尝试过进行整个 a_lov 查询,添加一个“INTO x”并将“:param”更改为“apex_application.g_f02(i)”。但它只是不起作用。
任何想法将不胜感激
【问题讨论】:
-
我认为问题出在
function_that_returns_an_sql_query返回的查询上。您能否包含完整的错误消息,包括行号以及有关该函数的一些信息? -
还有传递给函数的值( apex_application.g_f02(i) ),也可以帮助您查看帮助部分 How to Ask 和 minimal reproducible example。
-
@JonHeller prntscr.com/olcuj7 这是错误,第 94 行是以 EXECUTE IMMEDIATE 开头的。该函数返回VARCHAR2,形式如前所述,SELECT firstcol FROM (LOV QUERY) WHERE firstcol = :parameter;
-
@Belayer 传递的值是项目的值,它适用于验证过程中的所有其他内容。我可以尝试将此值分配给不同的变量并使用该变量(尝试过,没有用),还尝试了变量的静态分配,仍然是同样的错误。就最小可复制示例而言,这将需要几页长的帖子来为您提供一组项目描述、一个 plsql 动态区域、...
标签: plsql oracle-apex