【问题标题】:Stuck on if condition (PL/SQL)停留在 if 条件 (PL/SQL)
【发布时间】:2019-12-14 17:53:00
【问题描述】:

我只想在满足'if'条件时执行三个或更多删除语句。

我有这个查询,它有几行,每一行都有一个名为last_update_date 的列。看看:

SELECT PRODUCT_ATTR         as CATEGORY,
       product_attr_val     as COD_CATEGORY,
       qer.last_update_date
  FROM qp_modifier qer
  JOIN qp_list qar ON qar.list_header_id = qer.list_header_id
 ORDER BY qer.last_update_date desc

我只想在last_update_date 的情况下执行这 3 个删除语句 从上面的查询等于实际的或实际上是前面的 天。

  delete from TABLE_PRODUCTS where product_id like 'WAL%';
  delete from TABLE_PRODUCTS where item_code like 'MAS%';
  delete from TABLE_PRODUCTS where customer_class_code='K' and customer_number is null;

我正在考虑做这样的事情:

  select max (last_update_date)
  into v_date
  from  qp_modifier

然后写下这样的语句:

  if v_date = sysdate  or v_date = sysdate - 1 then
      delete from TABLE_PRODUCTS where product_id like 'WAL%';
      delete from TABLE_PRODUCTS where item_code like 'MAS%';
      delete from TABLE_PRODUCTS where customer_class_code='K' and customer_number is null;
  end if;

但这对我来说没有多大意义。

你会如何修改它?

【问题讨论】:

  • 由于您显示的查询可能会返回多行,哪一行是提供比较日期的行?真的是最大吗?如果日期低于满足条件的最大值怎么办?在这种情况下会被忽略吗?

标签: sql oracle sql-delete


【解决方案1】:

如果您使用or,您将拥有一个 delete

delete from TABLE_PRODUCTS
where product_id like 'WAL%' or
      item_code like 'MAS%' or
      customer_class_code = 'K' ;

然后你可以包括你的附加存在条件:

delete from TABLE_PRODUCTS
where (product_id like 'WAL%' or
       item_code like 'MAS%' or
       customer_class_code = 'K'
      ) and
      (select max(qer.last_update_date)
       from qp_modifier qer join
            qp_list qar
            on qar.list_header_id = qer.list_header_id
      ) >= trunc(sysdate) - interval 1 day;

【讨论】:

  • 嘿伙计。您能否向我解释一下这个语句是如何工作的:>= trunc(sysdate) - interval 1 day;?
  • @Student_new 。 . .这将检查子查询返回的最大日期是否发生在昨天或之后。
【解决方案2】:

max() 函数不需要。满足 if 条件,前提是 存在 用于连接查询的任何行,且 qer.last_update_date 列值超过(或等于)当天之前:

delete table_products
 where (    upper(product_id) like 'WAL%'
         or upper(item_code) like 'MAS%'
         or ( upper(customer_class_code) = 'K' and nvl(customer_number,0)=0 ) )         
   and exists (
               select 1
                 from qp_modifier qer
                 join qp_list qar on qar.list_header_id = qer.list_header_id
                where qer.last_update_date >= systimestamp - interval '1' day )

在哪里适合使用upper() 以不区分大小写地包含与通配符模式匹配的所有数据。

【讨论】:

  • 哥们,你有什么想法吗:stackoverflow.com/questions/59446601/…
  • 嘿,伙计,你好吗?我能问你一些事情吗:TCA Api 抛出此错误消息:“该站点必须属于客户帐户”。你知道哪个 api 和方法失败了吗?
  • 哥们,你知道吗?
  • 嗨@Student_new。不幸的是,我不知道。
  • 哦,好的哥们:)
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多