oracle中if/else功能的实现的3种写法

oracle中if/else功能的实现的3种写法
https://www.cnblogs.com/yangzhilong/archive/2013/04/03/2998282.html

1、标准sql规范

一、单个IF
1、if a=… then
. …
end if;

2、

if a=… then

else

end if;

二、多个IF

if a=… then

elsif a=… then

end if;
这里中间是“ELSIF”,而不是ELSE IF 。这里需要特别注意

2、decode函数

DECODE的语法:

DECODE(value,if1,then1,if2,then2,if3,then3,…,else)
表示如果value等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。

3、case when

case when a='1’then ‘xxxx’
when a=‘2’ then ‘ssss’
else
  ‘zzzzz’
end as
注意点:

1、以CASE开头,以END结尾
2、分支中WHEN 后跟条件,THEN为显示结果
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加
4、END 后跟别名

例子:

create or replace procedure MW_WMS_HANDLE_BILL_OUT(userCode       varchar2,
                                                   billType       VARCHAR2,
                                                   billCode       varchar2,
                                                   warehouseGroup varchar2,
                                                   theRetStr      out varchar2) is

  /**********************************************
  /*根据发料单生成出库单
  /*根据type处理不同类型事务
  **********************************************/

  tempBillCode  varchar2(50);
  queryBillCode varchar2(50);
  queryBillCodes varchar2(50);

begin
  --先判断临时表中是否存在该单据
   select distinct t.bill_code into queryBillCode from data_inv_bill_info t where t.map_bill_code=billCode and t.map_bill_code not in(select distinct a.map_bill_code from data_inv_temp_bill a where a.map_bill_code=billCode);
   select distinct t.bill_code into queryBillCodes from data_inv_temp_bill t where t.map_bill_code=billCode;
   
   if queryBillCode = '' then 
   if queryBillCodes = '' then
   
   if billType = 'O001' THEN
    --生产发料单生成出库单
    --DATA_PLAN_ISSUE_STOCK到temp
    tempBillCode := to_char(SEQ_CHECKDETAIL.NEXTVAL);

    insert into DATA_INV_TEMP_BILL
      (BILL_CODE,
       MAP_BILL_CODE,
       BILL_DATE,
       IO_FLAG,
       --DIRECTION_FLAG,
       BILL_TYPE,
       SAP_MOVE_TYPE,
       SAP_BILL_CODE,
       SAP_BILL_TYPE,
       RELATION_CODE,
       RELATION_TYPE,
       RELATION_USER,
       BILL_REMARK,
       LIST_CODE,
       LIST_STATUS,
       MAP_LIST_CODE,
       ITEM_CODE,
       ITEM_QTY,
       
       QUALITY_STATUS,
       UNIT_CODE,
       WAREHOUSE_GROUP,
       WAREHOUSE_CODE,
       SRC_SAP_STOCK,
       SRC_SAP_WERKS,
       DETAIL_USER,
       DETAIL_REMARK,
       CREATE_USER,
       CREATE_TIME,
       CREATE_FLAG)
    
      select tempBillCode,
             a.issue_code,
             sysdate,
             'O',
             '生产发料',
             '261',
             a.issue_code,
             a.issue_type,
             'PCB车间',
             '成本中心',
             '车间收料员',
             '生产发料',
             tempBillCode,
             'N',
             a.rmes_ID,
             a.item_Code,
             a.item_Qty,
             'Y',
             b.unit_code,
             warehouseGroup,
             b.default_warehouse_id, --改为warehouse_code
             '', --SRC_SAP_STOCK,
             '', --SRC_SAP_WERKS,
             a.receive_userid,
             a.remark,
             userCode,
             sysdate,
             'S'
        from DATA_PLAN_ISSUE_STOCK a
        left join code_item b
          on a.item_code = b.item_code
       where a.issue_code = billCode;
  
    theRetStr := 'Y1,' || tempBillCode;
  end if;
  
  if billType = 'O005' THEN
    --交货单生成出库单
    --SAP_DELIVERY_ORDER到temp  
    tempBillCode := to_char(SEQ_CHECKDETAIL.NEXTVAL);
  
    insert into DATA_INV_TEMP_BILL
      (BILL_CODE,
       MAP_BILL_CODE,
       BILL_DATE,
       IO_FLAG,
       --DIRECTION_FLAG,
       BILL_TYPE,
       SAP_MOVE_TYPE,
       SAP_BILL_CODE,
       SAP_BILL_TYPE,
       RELATION_CODE,
       RELATION_TYPE,
       RELATION_USER,
       BILL_REMARK,
       LIST_CODE,
       LIST_STATUS,
       MAP_LIST_CODE,
       ITEM_CODE,
       ITEM_QTY,
       
       QUALITY_STATUS,
       UNIT_CODE,
       WAREHOUSE_GROUP,
       WAREHOUSE_CODE,
       SRC_SAP_STOCK,
       SRC_SAP_WERKS,
       DETAIL_USER,
       DETAIL_REMARK,
       CREATE_USER,
       CREATE_TIME,
       CREATE_FLAG)
    
      select tempBillCode,
             b.vbeln,
             sysdate,
             'O',
             '成品发货',
             '601',
             b.vbeln,--sap-bill-code
             '发货单',--sap-bill-type
             a.name1,--关联方
             '客户',--关联方类型
             a.extension1,--接收方
             '',--单据备注
             tempBillCode,--清单号
             'N',--清单号状态
             b.rmes_ID,
             b.matnr,
             b.lfimg,
             'Y',
             c.unit_code,
             warehouseGroup,
             b.lgort, --改为warehouse_code
             '', --SRC_SAP_STOCK,
             '', --SRC_SAP_WERKS,
             a.extension1,--detail_user
             '',
             userCode,
             sysdate,
             'S'--单据标识
        from SAP_DELIVERY_ORDER a 
        left join SAP_DELIVERY_DETAIL b 
         on a.VBELN=b.vbeln
        left join code_item c
          on b.matnr = c.item_code
       where a.vbeln = billCode;
  
    theRetStr := 'Y1,' || tempBillCode;
  end if;
  
    
  if billtype = 'O002' then
    --从TMP生成到BILL INFO 
    tempBillCode := func_get_bill_code('BILL_OUT');
    insert into DATA_INV_BILL_INFO
      (BILL_CODE,
       MAP_BILL_CODE,
       BILL_DATE,
       IO_FLAG,
       BILL_TYPE,
       SAP_MOVE_TYPE,
       SAP_BILL_CODE,
       SAP_BILL_TYPE,
       RELATION_CODE,
       RELATION_TYPE,
       BILL_REMARK,
       LIST_CODE,
       ITEM_CODE,
       ITEM_QTY,
       QUALITY_STATUS,
       UNIT_CODE,
       WAREHOUSE_GROUP,
       SRC_SAP_STOCK,
       SRC_SAP_WERKS,
       DETAIL_USER,
       DETAIL_REMARK,
       CREATE_FLAG,
       CREATE_USER,
       CREATE_TIME)
      select tempBillCode,
             T.MAP_BILL_CODE,
             T.BILL_DATE,
             T.IO_FLAG,
             T.BILL_TYPE,
             T.SAP_MOVE_TYPE,
             T.SAP_BILL_CODE,
             'B',
             T.RELATION_CODE,
             T.RELATION_TYPE,
             T.BILL_REMARK,
             T.LIST_CODE,
             T.ITEM_CODE,
             T.ITEM_QTY,
             T.QUALITY_STATUS,
             T.UNIT_CODE,
             T.WAREHOUSE_GROUP,
             T.SRC_SAP_STOCK,
             T.SRC_SAP_WERKS,
             T.DETAIL_USER,
             T.DETAIL_REMARK,
             T.CREATE_FLAG,
             usercode,
             sysdate
        from data_inv_temp_bill t
       where t.bill_code = billcode
         and t.item_code in (select a.rmes_id
                               from TMP_CREATE_BILL_OUT a
                              where a.bill_seq = billcode);
    theRetStr := 'Y2,' || tempBillCode;
  
    DELETE FROM data_inv_temp_bill t
     WHERE t.bill_code = billcode
       and item_code in (select a.rmes_id
                           from TMP_CREATE_BILL_OUT a
                          where a.bill_seq = billCode);
  
    DELETE FROM TMP_CREATE_BILL_OUT T WHERE T.BILL_SEQ = billCode;
  
  end if;
  end if;

  else 
    theRetStr:='e,'||'该单据已生成出库单,请重写填写单据!';
  end if;
  commit;

exception
  when others then
    ---异常提示
    rollback;
    TheRetStr := 'N,' || '存储过程运行出错,请联系管理人员,反馈给北自所解决!';
end MW_WMS_HANDLE_BILL_OUT;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值