Oracle(.net)存儲過程的使用

Oracle 存儲過程的使用

Oralce存儲過程的使用,主要包括二個部門,第一部分爲編寫響應的存儲過程;第二部分爲調用存儲過程

1. 編寫存儲過程

oracle存儲過程的編寫一般會採用程序包(即爲包頭和包體)

  • 包頭的作用主要是聲明一些存儲過程、函數等

  • 包體是對包頭所聲明的存儲過程進行實現

  • 測試

實例如下

--編寫包頭
create or replace package package3 is

    TYPE type_cur IS REF CURSOR; --聲明遊標
    PROCEDURE getSystemCatByUserCode (usercode varchar2, p_rc OUT type_cur);--聲明存儲過程
end package3;
--編寫包體
create or replace package body package3 is
PROCEDURE getSystemCatByUserCode (usercode varchar2, p_rc OUT type_cur)
    IS
       sqlstr   VARCHAR2 (1000);
       v_sql varchar2(100);
       v_num int;
    BEGIN
      v_sql:='select count(*) from sys_system_customer where usercode='''||usercode||'''';
      EXECUTE IMMEDIATE v_sql INTO v_num;
       IF v_num = 0 THEN
          OPEN p_rc FOR
             select * from Sys_System_Type;
       ELSE
          sqlstr :=
             'with tmp as(
              select ty.typename as TYPENAME,ty.id as TYPEID, ct.usercode  as USERCODE ,ct.SORTID as SORTID,
              st.sysname as SYSNAME,st.sysid as SYSID from sys_system_customer  ct
              left join sys_system st on st.sysid=ct.systemid
              left join sys_system_type ty on ty.id=ct.catid where ct.usercode='''||usercode||''')
              select t.TYPEID as ID,t.TYPENAME, listagg(t.SYSID,'','') within group(order by SORTID)  as SUBSYSTEMIDS  from tmp t group by t.TYPEID,t.TYPENAME';
          OPEN p_rc FOR sqlstr;
       END IF;
    END getSystemCatByUserCode;
END package3;

測試
這裏寫圖片描述

2. 存儲過程的調用

        public System.Data.DataTable GetSystemCatByUserCode(string userCode)
        {
            OracleParameter[] parameters = {
                    new OracleParameter("usercode", OracleType.VarChar, 255),
                    new OracleParameter("p_rc", OracleType.Cursor)
                    };
            parameters[0].Value = userCode;
            parameters[1].Direction = ParameterDirection.Output;
            return DbHelperOra.RunProcedure("package3.getSystemCatByUserCode", parameters, "Sys_System_Type").Tables[0];
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章