Oracle學習筆記 十

2022-02-06 06:13:50 字數 3856 閱讀 5390

游標(游標)概念引入

就是乙個結果集(查詢或者其他操作返回的結果是多個時使用)

定義乙個游標

cursor c1 is select ename from emp;

從游標中取值

開啟游標:

--open c1;(開啟游標執行查詢)

關閉游標:

--close c1;(關閉游標釋放資源)

取一行游標的值:

--fetch c1 into pename;(取一行到變數中)

fetch的作用:

--把當前指標指向的記錄返回

--將指標指向下一條記錄

使用游標查詢員工姓名和工資,並列印

declare

--定義乙個游標

cursor cemp is select ename,sal from emp;

--為游標定義對應的變數

pename emp.ename%type;

psal emp.sal%type;

begin

--開啟游標

open cemp;

loop

--取一條記錄

fetch cemp into pename,psal;

--思考:1、迴圈什麼時候退出? 2、fetch不一定能取到記錄

--exit when 沒有取到記錄;

exit when cemp%notfound;

--列印

dbms_output.put_line(pename||'的薪水是'||psal);

end loop;

--關閉游標

close cemp;

end;

1、游標的屬性:

%found 取到值就是found

%notfound 取不到是這個

示例:給員工漲工資(根據職位漲工資)

總裁漲1000

經理漲800

其他員工漲400

更改表中的job為empjob,

--漲工資之前的薪水

select ename,job,sal from emp;

set serveroutput on

declare

--定義游標代表給哪些員工漲工資

--alter table 'scott' 'emp' rename column 'job' to empjob

--定義乙個游標

cursor cemp is select empno,empjob from emp;

--為游標定義對應的變數

pempno emp.empno%type;

pjob emp.empjob%type;

begin

rollback;

--開啟游標

open cemp;

loop

--取一條記錄

fetch cemp into pempno,pjob;

exit when cemp%notfound;

--判斷員工的職位

if pjob = 'president' then update emp set sal=sal+1000 where empno=pempno;

elsif pjob='manager' then update emp set sal=sal+800 where empno=pempno;

else update emp set sal=sal+400 where empno=pempno;

end if;

end loop;

--關閉游標

close cemp;

--對於oracle,預設的事務隔離級別是read committee

--事務的acid(原子性/一致性/隔離性/永續性)

commit;

dbms_output.put_line('漲工資完成');

end;

1、游標的屬性;

%found(取到值為true)

%notfound(取不到值為true)

%isopen(判斷游標是否開啟,因為oracle資料庫預設乙個會話中開啟的游標數是有限制的300個)

%rowcount(影響的行數,即已經被提取的行數,並非集合中的總行數)。

事例1:%isopen用法

set serveroutput on

declare

--定義乙個游標

cursor cemp is select empno,empjob from emp;

--為游標定義對應的變數

pempno emp.empno%type;

pjob emp.empjob%type;

begin

--開啟游標

open cemp;

if cemp%isopen then

dbms_output.put_line('游標已經開啟');

else

dbms_output.put_line('游標沒有開啟');

end if;

--關閉游標

close cemp;

end;

事例2:%rowcount用法

set serveroutput on

declare

--定義乙個游標

cursor cemp is select empno,empjob from emp;

--為游標定義對應的變數

pempno emp.empno%type;

pjob emp.empjob%type;

begin

--開啟游標

open cemp;

loop

--取出一條記錄

fetch cemp into pempno,pjob;

exit when cemp%notfound;

--列印rowcount的值

dbms_output.put_line('rowcount'||cemp%rowcount);

end loop;

--關閉游標

close cemp;

end;

2、游標的限制,預設情況下,orcle資料庫只允許在同乙個會話中,開啟300個游標

--切換到管理員

conn sys/1234 as sysdba

--檢視引數

show parameter cursor

修改游標數量的限制

alter system set open_cursors=400 scope=both;

scope的取值有三個

both(後兩個同時更改),memory,spfile(資料庫需要重啟)

3、帶引數的游標

--查詢某個部門中員工的姓名

set serveroutput on

declare

---定義帶引數的游標

cursor cemp(dno number) is select ename from emp where deptno=dno;

pename emp.ename%type;

begin

--開啟游標

open cemp(10);

loop

--取出一條記錄

fetch cemp into pename;

exit when cemp%notfound;

dbms_output.put_line(pename);

end loop;

--關閉游標

close cemp;

end;

***********游標是sql中代替集合(陣列)使用的引數.**********

Linux Shell學習筆記十

第14課時 函式 14.1 建立和使用函式 格式 name shell函式的乙個重要特徵是 可以用它們代替二進位制可執行檔案或shell內建的同名命令。例如 cd psi pwd export psi 該語句用了乙個函式代替了cd命令,該函式改變目錄,同時設定了主shell提示符 psi使其包含當前...

Effective Java學習筆記(十)

第5章序列化 19謹慎的實現serializable介面 implement serializable judiciously 實現serializable介面的代價有 當類被發布之後,改變該類的內部實現的靈活性降低了 增加了出錯的可能和安全漏洞 當發布類的新版本時,測試的負擔增大了,因為需要保證新...

Linux學習筆記(十)

vim程式編輯器 vi 的使用 基本上 vi 一般模式 以 vi 開啟乙個檔案就直接進入一般模式了 這是預設的模式 在這個模式中,你可以使用 上下左右 按鍵來移動游標,你可以使用 刪除字元 或 刪除整行 來處理檔案內容,也可以使用 複製 貼上 來處理你的檔案資料。編輯模式 在一般模式中可以進行刪除 ...