【问题标题】:Dynamically checking if value is in sql query动态检查值是否在 sql 查询中
【发布时间】: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 Askminimal reproducible example
  • @JonHeller prntscr.com/olcuj7 这是错误,第 94 行是以 EXECUTE IMMEDIATE 开头的。该函数返回VARCHAR2,形式如前所述,SELECT firstcol FROM (LOV QUERY) WHERE firstcol = :parameter;
  • @Belayer 传递的值是项目的值,它适用于验证过程中的所有其他内容。我可以尝试将此值分配给不同的变量并使用该变量(尝试过,没有用),还尝试了变量的静态分配,仍然是同样的错误。就最小可复制示例而言,这将需要几页长的帖子来为您提供一组项目描述、一个 plsql 动态区域、...

标签: plsql oracle-apex


【解决方案1】:

只是想发布更新,实际上已经找到了解决方案。这是有史以来最愚蠢的事情。

动态执行的位,我用分号结束,不应该那样做。仅此而已。

那个分号让我很困惑,现在它起作用了。因此,如果有人偶然发现这个问题,请检查您的分号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2022-01-12
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多