存储过程二

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 参数值

你可能感兴趣的:(存储过程)