Oracle帶輸入輸出參數(shù)存儲(chǔ)過(guò)程(包括sql分頁(yè)功能)
記錄一下,免得以后忘記了又要到處去找。
begin /*這里不能直接執(zhí)行select語(yǔ)句但可以直接執(zhí)行update、delete、insert語(yǔ)句*/ end里面不能接執(zhí)行select語(yǔ)句,聲明會(huì)話級(jí)臨時(shí)表必須有“execute immediate 'TRUNCATE TABLE 表名';”這一句不然其他的session無(wú)法drop(TRUNCATE TABLE 表名 必須在 ‘drop table 表名' 這一句前執(zhí)行)
create or replace procedure p_DevData(p_id IN varchar2(150),pageIndex in NUMBER,pageCount in NUMBER,totalCount in NUMBER,p_cur out sys_refcursor)
AUTHID CURRENT_USER
as
begin
declare
Num_Id number;
toCount NUMBER;
strSql varchar2(1000);
begin
strSql:='insert into TEMP_ROBOT_Id select id,robot_typeid from ROBOT where ID=:p_id and IS_DEL=0 and STATUS=1';
execute immediate 'TRUNCATE TABLE TEMP_ROBOT_Id';
execute immediate 'drop table TEMP_ROBOT_Id';
execute immediate 'Create Global Temporary Table TEMP_ROBOT_Id(ro_id varchar2(150),robot_typeid number)On Commit Preserve Rows';--創(chuàng)建會(huì)話級(jí)臨時(shí)表
execute immediate strSql using p_id;
execute immediate 'Commit';
execute immediate 'TRUNCATE TABLE TEMP_Dev_Table';
execute immediate 'drop table TEMP_Dev_Table ';
execute immediate 'Create Global Temporary Table TEMP_Dev_Table (id varchar2(150),DEVICE_CODE varchar2(150),NAME varchar2(150))On Commit Preserve Rows';--創(chuàng)建會(huì)話級(jí)臨時(shí)表
execute immediate 'insert into TEMP_Dev_Table select distinct bai.ID,bai.DEVICE_CODE,bai.NAME from DEVICE_BASE_INFO bai WHERE bai.ROBOT_ID =(select ro_id from TEMP_ROBOT_Id) and IS_DEL=0 and STATUS=1';
execute immediate 'Commit';
execute immediate 'TRUNCATE TABLE TEMP_Dev_data_Table';
execute immediate 'drop table TEMP_Dev_data_Table ';
execute immediate ' Create Global Temporary Table TEMP_Dev_data_Table (id varchar2(150),DEVICE_CODE varchar2(150),
NAME varchar2(150),type_name varchar2(100),YY_NUM varchar2(10),MM_NUM varchar2(10),Day_NUM varchar2(10),
HH_NUM varchar2(10) )On Commit Preserve Rows';--創(chuàng)建會(huì)話級(jí)臨時(shí)表
select Count(1) Into toCount from TEMP_ROBOT_Id;
if toCount>0 then
select robot_typeid Into Num_Id from TEMP_ROBOT_Id;
if Num_Id=1 then
dbms_output.put_line('視頻沒(méi)有數(shù)據(jù)');
elsif Num_Id=2 then
dbms_output.put_line('井蓋數(shù)據(jù)不通');
elsif Num_Id=3 then
execute immediate 'TRUNCATE TABLE TEMP_SMOKE_ALARM_INFO';
execute immediate 'drop table TEMP_SMOKE_ALARM_INFO ';
execute immediate 'CREATE GLOBAL TEMPORARY table TEMP_SMOKE_ALARM_INFO ON COMMIT Preserve ROWS as select * from SMOKE_ALARM_INFO';--創(chuàng)建會(huì)話級(jí)臨時(shí)表
execute immediate 'Commit';
insert into TEMP_Dev_data_Table select t.ID,t.DEVICE_CODE,t.NAME,t.type_name,t.YY_NUM,t.MM_NUM,t.Day_NUM,t.HH_NUM from (
select tab.ID,tab.NAME,tab.DEVICE_CODE,'煙感報(bào)警'as type_name,
(select count(s.DEVICE_BASE_INFOID) HH_NUM from TEMP_SMOKE_ALARM_INFO s where s.DEVICE_BASE_INFOID=tab.ID
group by to_char(s.CREATE_DATE,'YYYY'),s.DEVICE_BASE_INFOID) as YY_NUM
from TEMP_Dev_Table tab)t where t.yy_num is not null;
Commit;
elsif Num_Id=4 then
dbms_output.put_line('未知類型');
elsif Num_Id=5 then
dbms_output.put_line('未知類型');
else
dbms_output.put_line('未知類型');
end if;
end if;
end;
if totalCount<=0 then
open p_cur for select * from (
select row_.*, rownum rownum_
from (
select t.* from TEMP_Dev_data_Table t
order by t.id desc
) row_
where rownum <=case when pageCount <> 0 then pageCount*1 else rownum end /*每頁(yè)顯示多少條*頁(yè)數(shù)*/
)
where rownum_>=case
when pageCount <> 0
then
/*(頁(yè)數(shù)-1)=0 說(shuō)明為第一頁(yè)則(頁(yè)數(shù)-1)*每頁(yè)顯示多少條否則(頁(yè)數(shù)-1)*每頁(yè)顯示多少條+1*/
case when (pageIndex-1)=0 then ((pageIndex-1)*1) else (((pageIndex-1)*pageCount)+1) end
else rownum_ end; /*(頁(yè)數(shù)-1)*每頁(yè)顯示多少條+1*/
else
open p_cur for select Count(1) as totalCount from TEMP_Dev_data_Table;
end if;
end p_DevData;
總結(jié)
以上所述是小編給大家介紹的Oracle帶輸入輸出參數(shù)存儲(chǔ)過(guò)程(包括sql分頁(yè)功能),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- oracle 存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)器用法實(shí)例詳解
- windows中oracle存儲(chǔ)過(guò)程加密的實(shí)例代碼
- oracle中print_table存儲(chǔ)過(guò)程實(shí)例介紹
- Mybatis調(diào)用Oracle存儲(chǔ)過(guò)程的方法圖文詳解
- 詳解Oracle調(diào)試存儲(chǔ)過(guò)程
- Oracle存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)創(chuàng)建方法(詳解)
- Oracle存儲(chǔ)過(guò)程及調(diào)用
- Oracle存儲(chǔ)過(guò)程、包、方法使用總結(jié)(推薦)
- Oracle生成單據(jù)編號(hào)存儲(chǔ)過(guò)程的實(shí)例代碼
- Oracle數(shù)據(jù)庫(kù)創(chuàng)建存儲(chǔ)過(guò)程的示例詳解
相關(guān)文章
Oracle實(shí)現(xiàn)查詢2個(gè)日期所跨過(guò)的月份列表/日期列表的方法分析
這篇文章主要介紹了Oracle實(shí)現(xiàn)查詢2個(gè)日期所跨過(guò)的月份列表/日期列表的方法,結(jié)合實(shí)例形式分析了Oracle日期相關(guān)查詢與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
ORACLE應(yīng)用經(jīng)驗(yàn)(1)
ORACLE應(yīng)用經(jīng)驗(yàn)(1)...2007-03-03
oracle中not exists對(duì)外層查詢的影響詳解
這篇文章主要給大家介紹了關(guān)于oracle中not exists對(duì)外層查詢的影響,文中介紹的非常詳細(xì),需要的朋友可以參考下。2017-02-02
ORACLE時(shí)間函數(shù)(SYSDATE)深入理解
有些朋友對(duì)ORACLE時(shí)間函數(shù)理解不是很透徹,接下來(lái)講詳細(xì)介紹,希望可以幫助到你們2012-12-12

