• 存储过程二


    0. sql语句的提交和回滚

    a. 可直接执行增删改,只用在最后提交时使用

    strsql='insert into....";

    execute immediate str_sql;

    commit; 所有的语句会一起提交

    b. 在程序一开始就设置回滚点

    savepoint save_point1;   --定义回滚保存点

    c 执行sql语句后提交/回滚

    execute immediate str_sql;
         exception
          when others then
              rollback to save_point1; /*异常处理,保存点下面的操作都不会被执行*/
              Out_msg :='操作失败!'; --输出变量
        commit;

    1. 输出

    --DBMS_OUTPUT.PUT_LINE(sqlstr);

    2. 输出参数(返回数据集)

    参数: returnResult OUT DATA_OPRSTORE.selectoprcursor ) --返回的结果集

    返回: OPEN returnResult FOR sqlstr;            --返回结果集

       System.Data.OracleClient.OracleParameter dbPara = new System.Data.OracleClient.OracleParameter();
                dbPara.ParameterName = @“returnValue”;
                dbPara.OracleType = OracleType.Cursor;
                dbPara.Direction = ParameterDirection.Output;

    3. 参数条件判断

    if 有值 else 空值,对应存储过程的default null,不满足查询提交时可传null值或不传值

       if (!string.IsNullOrEmpty(_model.ss))
                {
                    pa = OracleHelper.GetParameter(@":ss", _model.ss, _model.ss.Length, ParameterDirection.Input, OracleDbType.Varchar2, OracleCollectionType.None);
                                }
                else
                {
                    pa = OracleHelper.GetParameter(@":ss", null, _model.ss.Length, ParameterDirection.Input, OracleDbType.Varchar2, OracleCollectionType.None);
                             }

    ss IN VARCHAR2 DEFAULT NULL,         

    4. 日期参数

    UpToDate2 IN DATE DEFAULT NULL,         --销售时间

    sqlstr:=sqlstr||' AND ssm.stockindate <='''||UpToDate1||'''';

    5. 获得sql返回值(agencyName 为定义的变量 agencyName VARCHAR2(1000);)

    select (SELECT sa.agencyname FROM agency sa WHERE sa.agencyid=4444) into agencyName from dual;

    6. 获取数据库中的某一行作为实体类返回

    a. 定义变量: ShopInfo shop_ss%rowtype;      --shop_ss必须和表的名称一致

    b. select * into ShopInfo from shop_ss where id=12 ;
    IF ShopInfo.cid IS NOT NULL THEN
        DBMS_OUTPUT.put_line('实体类成功!');
       END IF ;

    7. 轮询数据库中的每一行

    a. 定义类型和变量

    type ShopCur is table of shop%rowtype index by binary_integer;     --定义类型(shop 必须和表名一致)
    S_Read     ShopCur;      --定义变量

    b. 使用

       execute immediate 'select * from shop'
         bulk collect into S_Read;
        if S_Read is not null then
       i := S_Read.count;
                    while i > 0 loop
                          if S_Read(i).var1 <= 44 then
                              tempVar:= S_Read(i).var2;
                              exit;
                          end if;
                    i := i -1;
                    end loop;
       END IF ;

    8. 存储过程嵌套调用传递参数

    Shop_Upgrade(S_C => S_C1,S_A => S_A);

    Shop_Upgrade为被调用的存储过程名称,S_C ,S_A为两个存储过程都有的变量

    ---S_C参数名 S_C1 参数值

  • 相关阅读:
    MySQL的Date()函数拼接
    org.osgi.framework.BundleException: Exception in org.eclipse.core.resources.ResourcesPlugin.start()
    js判断对象是否为空对象的几种方法
    json,js中typeof用法详细介绍及NaN、 null 及 undefined 的区别
    将[object Object]转换成json对象
    升级d7的代码到2010以上版本注意事项(SetLength的参数就是字符长度,而不是字节长度,但Move函数要改)
    我是如何用 10 天自学编程,改变一生的?(学习编程的时候,不要死记硬背,要培养感觉)
    Anbox —— 在 Linux 系统中运行 Android 应用
    一定要在commit之前做RAR备份,这样在出问题的时候,可以排除别人代码的干扰
    排序算法总结
  • 原文地址:https://www.cnblogs.com/gossip/p/2269397.html
Copyright © 2020-2023  润新知