oracle 之 迴圈 游標

2021-08-08 17:25:00 字數 4520 閱讀 6266

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

dbms_output.put_line('工資等級為一級');

elseif v_sal<3000

then

dbms_output.put_line('工資等級為一級');

else

dbms_output.put_line('工資等級為一級');

endif;end;

/

set serverout on

declare

--定義迴圈初始值

i number(10):=0;

begin

loop

--改變增量

i:=i+1;

dbms_output.put_line(i);

--迴圈退出條件

exit when i = 10;

end loop;

end;

/

declare

i number(10):=0;

begin

loop

ifmod(i,2)=0

then

dbms_output.put_line(i);

endif; i:i+1;

exit

when i = 10;

endloop;

end;

/

set serverout on

declare

i number(10):=0;

begin

--定義 while 迴圈

while i<=10 loop

--迴圈操作

dbms_output.put_line(i);

--改變迴圈條件

i:=i+1;

end loop;

end;

/### 5.for 迴圈

set serverout on

begin

for i in

1..10 loop

dbms_output.put_line(i);

end loop;

end;

/

-- 生成隨機字元 dbms_random.string(選項,長度);

-- 選項:u 表示大寫字母,l表示小寫字母,x表示數字和字母混合,p 任意字元

-- 隨機生成數字:語法1:dbms_random.value (0,1);

-- dbms_random.value*num; 0到 num 的隨機數

-- dbms_random.value(min,max); 生成 min 到 max 隨機數

-- 隨機數取整:round(dbms_random.value(min,max); 四捨五入

trunc(dbms_random.value(min,max); 將數字的小數部分截去

create

table student

( sid number(20) not

null

primary

key,

sname varchar2(20) not

null,

password varchar2(20) not

null,

*** varchar2(20) not

null,

phone varchar2(20)

);set serverout on

begin

for i in

1..20 loop

insert

into student(sid,sname,password,***,phone)

values(

1,dbms_random.string('u',6),

dbms_random.string('x',10),

trunc(dbms_random.value(13000000000,18900000000))

);commit;

end loop;

end;

/

set serverout on

declare

v_deptno dept.deptno%type:=&p_deptno;

begin

delete from emp where deptno=v_deptno;

-- sql%rowcount 記錄刪除的行數;如果 rowcount>0,表示已經刪除員工。

if sql%rowcount>0

then

-- 再刪除部門

delete from dept where deptno=v_deptno;

dbms_output.put_line('部門編號為:'||v_deptno||'的部門資訊已經刪除!');

else

-- 員工數目為空

dbms_output.put_line('部門編號為:'||v_deptno||'的員工資訊已經刪除!');

endif;end;

/

set serverout on

declare

-- 1.定義游標

cursor cursor_emp

isselect ename,sal from emp where rownum<=10;

-- 定義兩個變數,分別來接受游標提取兩列的值

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

-- 2.開啟游標

open cursor_emp;

-- 3.提取游標內的第一行資料中的兩類資料分別賦予兩個變數

fetch cursor_emp into v_ename,v_sal;

-- 4.迴圈列印提取游標內容,發現下一行就迴圈,類似 jdbc

while cursor_emp%fount loop

dbms_output.put_line(v_ename||'---'||v_sal);

-- 改變迴圈條件,檢視是否有下一條資料

fetch cursor_emp into v_ename,v_sal;

end loop;

-- 5.關閉游標

close cursor_emp;

end;

/

set serverout on

declare

-- 1.定義弱型別游標

type emp_cursor_type is ref cursor;

( 強型別 ref_cursor 返回的資料型別和長度在編譯期就應該指明,而弱型別 ref_cursor 不需要。)

-- 2.定義游標型別

v_cursor_emp emp_cursor_type;

-- 3.定義游標型別變數的行記錄,指的是,游標提取的一條資料中

的列數和列名和資料庫類一致

v_emp_record emp%rowtype;

begin

-- 4.開啟游標

open v_cursor_emp for sleect * from emp where deptno=20;

-- 5.迴圈提取游標內容

loop

-- 5.1 提取游標內容到行記錄

fetch v_cursor_emp into v_emp_record;

-- 5.2 列印提取的資料

dbms_output.put_line('ename:'||v_emp_record);

-- 5.3 定義迴圈退出條件

exit when v_cursor_emp%notfound;

end loop;

-- 6.關閉游標

close v_cursor_emp;

end;

/

set severout on

declare

-- 1.定義游標

cursor cursor_emp

isselect ename,sal from emp where rownum<=10;

begin

-- 自動開啟,提取,關閉

for i in cursor_emp loop

dbms_output.put_line(i.ename||'---'||i.sal);

end loop;

end;

/

Oracle 游標與迴圈

對於剛接觸資料庫的小夥伴們來說,sql語句只是方便我們查詢的工具,但是伴隨著我們日精月益的開發。簡單的查詢已經不能滿足我們的開發需求,我們需要使用到sql進行程式設計,這個過程,我們稱之 sql程式設計 auth xiang想 declare i number 0 定義變數 i number型別,並...

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...