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('未知類(lèi)型');
elsif Num_Id=5 then
dbms_output.put_line('未知類(lèi)型');
else
dbms_output.put_line('未知類(lèi)型');
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使用to_date查詢(xún)一周的第一天日期
項(xiàng)目的開(kāi)發(fā)中需要用到一個(gè)查詢(xún)一周的第一天日期的函數(shù)搜索N久很難找到解決的方法 只要自己寫(xiě)一個(gè)先用著 代碼如下 a_week格式為 'YYYYIW' 如 '200801'表示2008年的第一周2014-01-01
Oracle數(shù)據(jù)庫(kù)及應(yīng)用程序優(yōu)化開(kāi)發(fā)者網(wǎng)絡(luò)Oracle
Oracle數(shù)據(jù)庫(kù)及應(yīng)用程序優(yōu)化開(kāi)發(fā)者網(wǎng)絡(luò)Oracle...2007-03-03
使用Oracle命令進(jìn)行數(shù)據(jù)庫(kù)備份與還原
本文詳細(xì)講解了使用Oracle命令進(jìn)行數(shù)據(jù)庫(kù)備份與還原的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>2021-12-12
sql – Oracle中匿名TABLE/VARRAY類(lèi)型示例詳解
這篇文章主要給大家介紹了關(guān)于Oracle中匿名TABLE/VARRAY類(lèi)型的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用oracle具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
基于OGG實(shí)現(xiàn)Oracle實(shí)時(shí)同步MySQL的全過(guò)程
這篇文章詳細(xì)闡述了基于OGG實(shí)現(xiàn)Oracle實(shí)時(shí)同步MySQL全過(guò)程,文中通過(guò)圖文結(jié)合和代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11
Oracle捕獲問(wèn)題SQL解決CPU過(guò)渡消耗
本文通過(guò)實(shí)際業(yè)務(wù)系統(tǒng)中調(diào)整的一個(gè)案例,試圖給出一個(gè)常見(jiàn)CPU消耗問(wèn)題的一個(gè)診斷方法.2007-03-03
淺析常用數(shù)據(jù)庫(kù)的自增字段創(chuàng)建方法匯總
本篇文章是對(duì)常用數(shù)據(jù)庫(kù)的自增字段創(chuàng)建方法進(jìn)行了全面的匯總介紹,需要的朋友參考下2013-07-07
PowerDesigner15.1連接oracle11g逆向生成ER圖
這篇文章主要為大家詳細(xì)介紹了PowerDesigner15.1連接oracle11g逆向生成ER圖的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

