首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle to_char、to_number的使用有关问题

2013-09-05 
oracle to_char、to_number的使用问题本帖最后由 monday707455915 于 2013-09-02 14:27:25 编辑我在写存储

oracle to_char、to_number的使用问题
本帖最后由 monday707455915 于 2013-09-02 14:27:25 编辑 我在写存储过程的时候写了以下代码:


CREATE OR REPLACE PROCEDURE proc_del_shipplan (
   wl_bay_no    IN     VARCHAR2,
   wl_deck_id   IN     VARCHAR2,
   wl_ship_no   IN     VARCHAR2,
   wl_Return       OUT VARCHAR2)
/*====================================================
  名称:proc_del_shipplan
  参数:wl_bay_no varchar2  输入变量,传入贝位号,一定为偶数,表示一个大贝;
             wl_deck_id varchar2  输入变量,传入甲板上下的标识;
             wl_ship_no varchar2  输入变量,传入船号;
             wl_return    number   输出变量,传出过程执行状态,99--执行成功,--执行失败。

  功能:利用三个传入参数检索ship_plan中的work_queue_no字段;
        然后统计work_queue表中work_queue_no in 上面查询结果的记录的条数,
        若记录为0,则删掉ship_plan中相应的记录,否则不做处理。

   版本:v1.0     wangxf    20130902


=====================================================*/
IS
   wl_row_cnt    NUMBER;
   wl_que_typ    VARCHAR2 (4);
   wl_debug      NUMBER := 0;
   wl_bay_temp   NUMBER;
   wl_b1         ship_plan.bay_no%TYPE;
   wl_b2         ship_plan.bay_no%TYPE;
   wl_b3         ship_plan.bay_no%TYPE;
   wl_b4         ship_plan.bay_no%TYPE;
BEGIN
   wl_bay_temp := TO_NUMBER (wl_bay_no);                         --转换为数字型,方便计算
   wl_b1 := TO_CHAR (wl_bay_temp - 1, '099');
   wl_b2 := TO_CHAR (wl_bay_temp, '099');
  /* wl_b3 := TO_CHAR (wl_bay_temp - 1, '099')
             || '/'
             || TO_CHAR (wl_bay_temp + 1, '099');*/


   wl_b4 := TO_CHAR (wl_bay_temp + 1, '099');

   BEGIN
      SELECT COUNT (0)
        INTO wl_row_cnt
        FROM work_queue a, ship_plan b
       WHERE     a.tool_no = b.ship_no
             AND a.work_queue_no = b.work_queue_no
             AND a.queue_typ = b.queue_typ
             AND b.deck_id = wl_deck_id
             AND b.ship_no = wl_ship_no
             AND b.bay_no = wl_bay_no;           --问题所在行
               /*b.bay_no = wl_b1 
              or b.bay_no = wl_b2
              or b.bay_no = wl_b3
              or b.bay_no = wl_b4;
               */
                                     
   EXCEPTION
      WHEN OTHERS
      THEN
         wl_Return := SQLCODE || SQLERRM;
         RETURN;
   END;
/*
   IF wl_row_cnt = 0
   THEN
      BEGIN
         DELETE FROM ship_plan
               WHERE     ship_no = wl_ship_no
                     AND bay_no = wl_bay_no
                     AND deck_id = wl_deck_id;


      EXCEPTION
         WHEN OTHERS
         THEN
            wl_Return := SQLCODE || SQLERRM;
            RETURN;
      END;
   END IF;
   commit;*/
   wl_return := 99;
END;
/


问题描述:测试发现,直接使用过程传入参数wl_bay_no,是可以检索出数据的,但是经过我的to_number、to_char两次转换,就检索不出数据了。求这两个转换函数的详细描述,有什么内幕在吗 oracle to_char to_number
[解决办法]
如果你确认输入参数固定是3位长的话应该木有问题,but

select to_char(to_number('5'),   '099') b from dual;
select to_char(to_number('05'),  '099') b from dual;
select to_char(to_number('005'), '099') b from dual;

看看上面这三句的区别就明白了!

热点排行