oracle 存储过程中文问题

本文分享了一位开发者在使用Oracle存储过程中遇到的问题及其解决方案。该开发者创建了一个用于更新特定日期范围内记录状态的过程,在PL/SQL Developer中可以正常运行,但在Java程序中调用时不起作用。最终通过更改日期判断方式解决了问题。

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

  这几天遇见个很棘手的问题.

 经过几天的原因分析查找,终于把问题给解决的.不知道大家也是否遇见过.很简单的但有可能你会忽略.

   大家有什么更好的方法 大家一起共享.

   我写了这样一个存储过程:

 create or replace procedure AUTO_CBD_HOLIDAY(inTime in varchar2) is
  cursor cur_cbd_id is
  select c.cbd_id from clear_by_day cwhere C.PLM_ID and
  ((to_char(C.BEGIN_TIME,'day')='星期六' or to_char(C.BEGIN_TIME,'day')='星期日') 

  and c.BEGIN_TIME>=add_months(to_date(inTime||-1,'yyyy-mm-dd'),1) and
  c.BEGIN_TIME<=last_day(add_months(to_date(inTime||-1,'yyyy-mm-dd'),1)) );
  var_cbd_id   varchar2(10); --日清id
 begin
  open cur_cbd_id;
  loop
  FETCH cur_cbd_id into var_cbd_id;
  EXIT WHEN cur_cbd_id%NOTFOUND;
  update clear_by_day c set c.cbd_state='3'  where c.cbd_id=var_cbd_id;
  if sqlcode = 0 then
     Commit;
  else
     Rollback;
  end if;
  end loop;
 end AUTO_CBD_HOLIDAY;

 以上过程在PLSQL Developer工具中每次都能正确的执行,而且速度相当快.但是在java程序中调用这个过程时每次都不生效.后来我换的一种形式处理.就是把 to_char(C.BEGIN_TIME,'day')='星期六' or to_char(C.BEGIN_TIME,'day')='星期日' 改成 to_char(C.BEGIN_TIME,'d')='7' or to_char(C.BEGIN_TIME,'d')='1'  问题就解决的.

 大家以后在用oracle的时候  对于中文的问题的特加注意!问题终于解决,真爽.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值