Oracle 游標與迴圈

2021-10-10 10:28:42 字數 3271 閱讀 6068

對於剛接觸資料庫的小夥伴們來說,sql語句只是方便我們查詢的工具,但是伴隨著我們日精月益的開發。簡單的查詢已經不能滿足我們的開發需求,我們需要使用到sql進行程式設計,這個過程,我們稱之:sql程式設計

-- auth xiang想

declare

i number:=0;

-- 定義變數 i number型別,並且賦值 0

begin

loop

-- 開啟迴圈

i:=i+1;

-- 自增

if i>

10then

-- if 判斷 當 i>10 時

exit

;-- 退出迴圈

endif

;-- if 為 非

dbms_output.put_line(i)

;-- 輸出

endloop

;-- 結束迴圈

dbms_output.put_line(

'最後:'

||i)

;-- 輸出

end;

輸出結果:

-- 把 all_users 表中的所有資料,全部放進游標中

cursor c is select * from all_users;

u all_users%rowtype;

begin

open c;

loop

fetch c into u;

exit when c%notfound;

dbms_output.put_line(u.username||'---'||u.user_id);

end loop;

close c;

end;

all_users 表是系統表,直接放資料庫裡幹就完了!!!

我們可以這麼理解,c 是乙個list< map >型別的集合,他把整個 all_users 表都裝進去了

其次,我們定義了 u 是list< map > 中眾多map中的乙個, 型別為 all_users 型別

然後 我們開啟游標 c ,進行迴圈

因為是迴圈遍歷乙個 list< map > 我們每遍歷出來的乙個map都將放進 u 中,也符合 all_users 型別 【all_users%rowtype】

當游標 c 迴圈遍歷到找不到的時候,退出 【exit】

最後,我們輸出這個map中的值, u.username u.user_id

退出迴圈、關閉游標、退出

當我們理解loop 和 游標之後,就想是理解了 迴圈 和 容器,有了容器,我們就可以幹一些奇奇怪怪的事情了,就比如,把資料庫中所有的表的資料條數輸出出來

前提是我們運算元據庫的許可權必須是dba

我們可以通過查詢 user_tables 檢視,獲取到資料庫的所有表

select table_name from user_tables;
現在可以查詢到所有的表名,我們就可以進行遍歷這個表名了

-- auth xiang想

declare

-- 把 user_tables 表中的所有資料,全部放進游標中

cursor c1 is

select table_name from user_tables;

v_tabnm varchar2(

100)

;begin

open c1;

loop

exit

when c1%notfound;

fetch c1 into v_tabnm;

dbms_output.put_line(v_tabnm)

;end

loop

;close c1;

end;

用 v_tabnm 來獲取表名,並列印出來

很顯然,我們最終的目的並不是列印出來,而是利用獲取到的表名拼接處查詢語句 例如: select count(0) from [表名]

所以,我們可以加兩個變數,

再利用 execute immediate 關鍵字,執行我們拼接處的sql語句,把值返回到 v_num 中實現,查詢出表的總行數

-- auth xiang想

declare

-- 把 user_tables 表中的所有資料,全部放進游標中

cursor c1 is

select table_name from user_tables;

v_tabnm varchar2(

100)

;-- 表名

v_sql varchar2(

200)

;-- sql語句

v_num number(10)

;-- 查到的總條數

begin

open c1;

loop

exit

when c1%notfound;

fetch c1 into v_tabnm;

v_sql:=

'select count(*) from '

||v_tabnm;

execute immediate v_sql into v_num;

dbms_output.put_line(v_tabnm||

'表中有:'

||v_num||

'行資料');

endloop

;close c1;

end;

結果:

快去試試吧!

好了到這我們的分享也就結束了?希望以上方法可以幫到您,祝您工作愉快!??

對您有幫助的話記點讚得收藏哦!?

我是xiang想

從乙個小白一步一步地變成工具人 ?

oracle 之 迴圈 游標

set serverout on declare v empno emp.empno type p empno v sal emp.sal type begin select sal into v sal from emp where empno v emono if v sal 1500 then...

Oracle 游標迴圈插入資料

遇到乙個需求統計歷史每個月底的資料插入到表中,查詢了資料發現使用游標會很方便,記錄一下解決思路 先查出每個月月底的日期作為條件 select to char lastday,yyyy mm dd lastday from select last day add months to date 2014...

使用Oracle顯式游標及for迴圈

使用隱式游標和顯式游標 1.查詢返回單行記錄時 隱式游標 2.查詢返回多行記錄並逐行進行處理時 顯式游標 顯示游標屬性 declare cursor cur emp is select from emp row emp cur emp rowtype begin open cur emp fetch...