首页 运维知识 关于oracle pl/sql 动态SQL

关于oracle pl/sql 动态SQL

oracle 动态sql: –差旅费用值变化时 同步更新报销模块的差旅费用值(税率值更新由前台方法实现同步)。 procedure UPDATE_EMAMOUNT(p_tenan…

oracle 动态sql:

 --差旅费用值变化时 同步更新报销模块的差旅费用值(税率值更新由前台方法实现同步)。                   
  procedure UPDATE_EMAMOUNT(p_tenantid number, p_mainid in number) IS
    tm_amount    decimal(10,2); --差旅费用值
    em_formula   varchar2(200); --率费计算公式
    em_tax      decimal(10,4); -- 税费
    em_expenseid number; --报销主表Id
    em_detailid  number; --报销明细ID       
  BEGIN
    --取差旅费用值
    select realamount
      into tm_amount
      from tm_travelmain t
     where TRAVELMAINID = p_mainid;
  
    --取报销明细ID
    select expensedetailid
      into em_detailid
      from em_expensetravel
     where travelmainid = p_mainid
       and tenantid = p_tenantid;
  
    --取报销主表ID
    select expenseid
      into em_expenseid
      from em_expenselist
     where expensedetailid = em_detailid;
  
    --取税率值
    EXECUTE IMMEDIATE 'select replace(taxformula,''总额'',''' ||
                      to_char(tm_amount) ||
                      ''') from  em_itemtypetax where itemtypeid= 
 (select itemtypeid from em_item where itemid= 
 (select expenseitemid from em_expenselist where  expensedetailid=' ||
                      em_detailid || '))'
      into em_formula;
   -- dbms_output.put_line(em_formula);
    EXECUTE IMMEDIATE 'select round(' || em_formula || ',4) rate from dual'
      into em_tax;
   -- dbms_output.put_line(em_rate);
  
  
    --更新报销明细表差旅费用及税额
    update em_expenselist
       set amount = tm_amount,taxamount=em_tax
     where expensedetailid = em_detailid;
  
    --更新报销主表中费用及税额
    update em_expensemain
       set amountsum = (select sum(amount)
                          from em_expenselist
                         where expenseid = em_expenseid),
                         businesstax = (select sum(taxamount)
                          from em_expenselist
                         where expenseid = em_expenseid)
     where expenseid = em_expenseid;
  END;

执行oracle带有参数的存储过程:

--调用1:
DECLARE   
mainid number;
tenantid number;
BEGIN   
mainid := 94;  
tenantid := 41;
pkg_tm.update_emamount(tenantid,mainid); 
END;
--调用2:
begin
  -- Call the procedure
  pkg_tm.update_emamount(p_tenantid => 41,
                         p_mainid => 94);
end;
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 小小编

为您推荐

dell R710 更换raid卡后,raid卡信息没有了,处理方案

dell R710 更换raid卡后,raid卡信息没有了,处理方案

1.将一台服务器(A)的硬盘依次拔出,按相同顺序插入另一台同样配置的服务器(B) 2.启动服务器(B) 3.按提示键盘按...
PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

下载 并安装 PL SQL Developer 13,默认支持中文语言 ========================...
关于一条sql语句在mysql中是如何执行的

关于一条sql语句在mysql中是如何执行的

最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在my...
关于sql注入姿势总结(mysql)

关于sql注入姿势总结(mysql)

前言 学习了sql注入很长时间,但是仍然没有系统的了解过,这次总结一波,用作学习的资料。 从注入方法分:基于报错、基于布...
关于Oracle SQL外连接

关于Oracle SQL外连接

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。 连接...

发表回复

返回顶部