博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle存储过程结合我公司代码1
阅读量:5795 次
发布时间:2019-06-18

本文共 2198 字,大约阅读时间需要 7 分钟。

 1.           Framework.QueryInfo info1 = new Framework.QueryInfo();
            //string Sql = Holworth.Utility.Utility.EntityRowMapper.getSql("//data//ValueAtRiskCalculationService//NoneQuery2");
            //info.CustomSQL = Sql;
            info1.NamedQuery = "P_TRAN_SIMULATION1";
            info1.Parameters.Add("v_ComputeDate1", DateTime.Parse("2015/3/9"));
            info1.Parameters.Add("v_ComputeDate2", DateTime.Parse("2015/6/9"));
            Dao.ExecuteNonQuery(info1);
2.

create or replace procedure P_TRAN_SIMULATION1

(
 v_ComputeDate1 in date,
 v_ComputeDate2 in date,
 r_cursor1 OUT sys_refcursor
)
/* Oracle:Authid Current_User的使用
 我们知道,用户拥有的role权限在存储过程是不可用的。遇到这种情况,我们一般需要显式授权,
 如grant create table to usera;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程,
 实际上,oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User时存储过程可以使用role权限。下面来举个例子: */
authid current_user
 is vn_ctn number(2);
begin
    select count(*) into vn_ctn from user_all_tables a where a.table_name like upper('tbl');
   if vn_ctn > 0 then --多条件就用and 和or 来进行连接
      execute immediate 'drop table tbl';  
   end if;
   
   execute immediate 'create table tbl(id1 number,id2 number)';   
declare cashflowPOSITIVE NUMBER:=0;
      cashflowNEGATIVE NUMBER:=0;
      cursor mycur is
      select *
      from TRAN_CASH_FLOW
      where as_of_date = v_ComputeDate1
      and payment_date >=v_ComputeDate1
      and payment_date < v_ComputeDate2;
      cashFlowRow TRAN_CASH_FLOW%rowtype;
begin     
  open mycur; --打开游标
     loop
         fetch mycur into cashFlowRow; --把游标所指的纪录放到变量中
         exit  when (mycur%notfound); --当游标没有指向行时退出循环
         if cashFlowRow.cashflow_value>0 then
           cashflowPOSITIVE:=cashflowPOSITIVE+cashFlowRow.cashflow_value;
           else
             cashflowNEGATIVE:=cashflowNEGATIVE+cashFlowRow.cashflow_value;
             end if;
     end loop;
    -- dbms_output.put_line(cashflowPOSITIVE);
    
     close mycur;  --关闭游标
      execute immediate 'insert into tbl values('||cashflowPOSITIVE||','||cashflowNEGATIVE||')';
   
   EXECUTE IMMEDIATE 'BEGIN OPEN :r_cursor1 FOR SELECT * FROM tbl; END;' using r_cursor1;
   close r_cursor1;
   end;
--execute immediate的作用
/* EXECUTE IMMEDIATE将不会提交一个DML事务执行
如果通过EXECUTE IMMEDIATE处理DML命令,
那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分.
如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据*/
end ;
调用存储过程的代码
 call p_tran_simulation1(to_date('2015/03/09','yyyy/mm/dd'),
                       to_date('2015/06/09','yyyy/mm/dd'));

转载于:https://www.cnblogs.com/kexb/p/4462160.html

你可能感兴趣的文章
Testbench文件编写纪要(Verilog)
查看>>
mysql多实例部署
查看>>
转:Java 异常结构体系
查看>>
关于Vue vue-cli安装遇到的一些问题
查看>>
我的Java开发学习之旅------>使用循环递归算法把数组里数据数组合全部列出
查看>>
“PDF修改器 2.5.2.0[强大的免费PDF文件编辑软件]”乃是假冒软件
查看>>
一些有用的github收藏(持续更新中...)
查看>>
位操作
查看>>
关于hostapd的调试
查看>>
modsign: could't get uefi db list
查看>>
Firefly Mutil-Boot多系统安装启动程序发布
查看>>
20145240《Java程序设计》课程总结
查看>>
Python paramiko模块
查看>>
设计模式
查看>>
(不)扩展内置原型((Not) Augmenting Built-in Prototypes)
查看>>
W驱开技详.过滤驱动测试
查看>>
关于MATLAB处理大数据坐标文件201762
查看>>
递推练习 简单n!
查看>>
spring项目启动错误——java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext...
查看>>
Android中解析XML
查看>>