【问题标题】:Compare variable to a value in a query将变量与查询中的值进行比较
【发布时间】:2021-09-13 17:38:26
【问题描述】:

我有一个光标,我需要循环并检查几个条件。如果该人的类别大于 24,我需要它来查看该人是否在表中也有以前的记录,如果满足条件,则更改 v_check 变量的值。问题是它说我不能在这里使用查询。我怎么能做到这一点?

[Error] Compilation (248: 39): PLS-00405: subquery not allowed in this context

IF v_category > 24 THEN 
    IF v_person_id = (
                        SELECT person_id
                        FROM mytable
                        WHERE category = 24
                            AND outcome IS NULL
                            AND person_id = v_person_id
                     ) THEN v_check := 'NO PREV OUTCOME';                                      
    ELSIF v_person_id = (
                            SELECT person_id
                            FROM mytable
                            WHERE category = 24
                                AND outcome_date IS NULL
                                AND person_id = v_person_id
                        ) THEN v_check := 'NO OUTCOME DATE';
    ELSIF category = 24 THEN v_check := 'N/A';
    END IF;
ELSE v_check := 'OK';  
END IF;

【问题讨论】:

    标签: oracle if-statement plsql plsql-package


    【解决方案1】:

    主要问题是您不能那样使用子查询; 首先找到select语句返回的值,然后case中使用它们。

    此外,您发布的代码没有多大意义

    • 您将v_person_id 用作变量(将值存储到其中)并且 - 同时 - 在selectwhere 子句中
    • 第一个 if 检查是否 v_category > 24,而最后一个 elsif 表示如果 v_category = 24 然后 'N/A' - 这永远不会发生。

    这是一个展示如何做的例子;它可能行不通,因为我不知道你到底想做什么(因为我在上面发布的注释),但我希望它能让你开始。

    declare
      v_person_id  number := some value
      
      l_person_id  number;
      l_person_uid number;
    begin  
      select person_id, person_uid
      into l_person_id, l_person_uid
      from mytable
      where category = 24
        and outcome is null
        and person_id = v_person_id;
      
      v_check = case when v_category > 24 and v_person_id = l_person_id  then 'NO PREV OUTCOME'
                     when v_category > 24 and v_person_id = l_person_uid then 'NO OUTCOME DATE'
                     else 'N/A'
                end;               
    end;            
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多