oracle的max()、full join和declare

本文探讨了使用SQL时可能遇到的一些技巧与潜在陷阱,包括MAX()函数的特殊行为及其可能导致的逻辑错误,如何通过额外的SELECT语句来规避这个问题。此外还介绍了FULL JOIN的使用场景,并提供了一个使用DECLARE进行循环处理的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是近期的一些小心得,它们之间没啥关系,统一做个记录而已。

一、max()

select * from table where ...

假如过滤条件不满足的话,返回的记录数为0.
但是,如果是

select max(...) from table where ...

过滤条件不满足,照样返回一条记录,max(…) is null
所以,如果是

insert into table1(...) select max(...) from table2 where ... 

必有记录插入, sql%rowcount 必定大于0,有时会导致一些逻辑上的错误。

解决办法是再select 多一次,将max(…)作为过滤条件,is null则过滤掉。

二、full join
左连接,left outer join,简写为left join
右连接,right join
全连接,full join,呵呵

三、declare
直接给代码,注意end后一定要带分号

declare
  new_time date := null;
begin

while new_time is null loop  
      pro_hy_data_handle_record;

      select max(create_time) into new_time from hy_data_handle_record
             where create_time>to_date('2017/8/28 13:48:33','yyyy/MM/dd hh24:mi:ss');

end loop;

end;  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值