oracle 中函式,游標的使用

2021-08-06 07:30:09 字數 4121 閱讀 7828

--建立函式並且呼叫

create function fun1(v_in_ename varchar2)

return number is

v_annual_sal number;

begin

select (sal+nvl(comm,0))*13 into v_annual_sal from emp where ename=v_in_ename;

return v_annual_sal;

end;

/--直接呼叫函式

var v_annual_sal number;

call fun1('ford') into:v_annual_sal;

print v_annual_sal;

--包--需求:編寫乙個包,該包有乙個過程,該過程可以接收使用者名稱和新的薪水

--(將來用於通過使用者名稱去更新薪水)還有乙個函式,該函式可以接收乙個使用者名稱

--(將來要實現得到該使用者的年薪是多少)

create package mypackage1 is

--宣告乙個過程

procedure pro1(v_in_ename varchar2,v_in_newsal number);

function fun1(v_in_ename varchar2) return number;

end;

--編寫包體

create package body mypackage1 is

--具體實現過程

procedure pro1(v_in_ename varchar2,v_in_newsal number) is

begin

update emp set sal=v_in_newsal where ename=v_in_ename;

end;

function fun1(v_in_ename varchar2) return number is

v_annual_sal number;

begin

select (sal+nvl(comm,0))*13 into v_annual_sal from emp

where ename=v_in_ename;

return v_annual_sal;

end;

end;

/ --pl/sql詳細語法

create or replace procedure pro1(v_in_empno number) is

--定義變數

v_tax_rate number :=0.03;

v_sal number;

v_tax number;

v_ename varchar2(32);

begin

select ename,sal into v_ename,v_sal from emp

where empno=v_in_empno;

v_tax:=v_sal*v_tax_rate;

dbms_output.put_line(v_ename||'工資是='||v_sal||'個人所得稅='||v_tax);

end;

--pl/sql中使用%type 來提高列的靈活性

create or replace procedure pro1(v_in_empno number) is

--定義變數

v_tax_rate number :=0.03;

v_sal emp.sal%type;

v_tax number;

v_ename emp.ename%type;

begin

select ename,sal into v_ename,v_sal from emp

where empno=v_in_empno;

v_tax:=v_sal*v_tax_rate;

dbms_output.put_line(v_ename||'工資是='||v_sal||'個人所得稅='||v_tax);

end;

--【案例】編寫乙個過程,該過程可以接收乙個使用者編號,

--並顯示該使用者的名字,薪水,工作崗位(注意:使用pl/sql記錄實現)

create or replace procedure pro1(v_in_empno in number) is

--定義記錄資料型別

type zy_emp_record is record(

v_ename emp.ename%type,

v_sal emp.sal%type,

v_job emp.job%type

);--定義乙個變數,型別是zy_emp_record

v_emp_record zy_emp_record;

begin

select ename,sal,job into v_emp_record

from emp where empno=v_in_empno;

dbms_output.put_line('使用者名稱:'||v_emp_record.v_ename||'薪水='||v_emp_record.v_sal);

end;

--游標的使用

create or replace procedure pro1(v_in_deptno number) is

--先定義乙個游標變數型別

type zy_emp_cursor is ref cursor;

--定義乙個游標變數

v_emp_cursor zy_emp_cursor;

--定義2個變數

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

--執行語句

open v_emp_cursor for select

ename,sal from emp where deptno=v_in_deptno;

--取出游標指向的每行資料,用迴圈語句

loop

fetch v_emp_cursor into v_ename,v_sal; --這句話執行後會引起v_emp_cursor向下走

--判斷當前游標是否到達最後

exit when v_emp_cursor%notfound;

--輸出

dbms_output.put_line('使用者名稱='||v_ename||' 薪水='||v_sal);

end loop;

--關閉游標

close v_emp_cursor;

end;

--游標的使用,在上面的基礎上新增工資

create or replace procedure pro1(v_in_deptno number) is

--先定義乙個游標變數型別

type zy_emp_cursor is ref cursor;

--定義乙個游標變數

v_emp_cursor zy_emp_cursor;

--定義2個變數

v_ename emp.ename%type;

v_sal emp.sal%type;

v_empno emp.empno%type;

begin

--執行語句

open v_emp_cursor for select

ename,sal,empno from emp where deptno=v_in_deptno;

--取出游標指向的每行資料,用迴圈語句

loop

fetch v_emp_cursor into v_ename,v_sal,v_empno; --這句話執行後會引起v_emp_cursor向下走

--判斷當前游標是否到達最後

exit when v_emp_cursor%notfound;

--輸出

dbms_output.put_line('使用者名稱='||v_ename||' 薪水='||v_sal);

if v_sal <2000 then

update emp set sal=sal+1000 where empno=v_empno;

end if;

end loop;

--關閉游標

close v_emp_cursor;

end;

oracle游標的使用

當select語句從資料庫中返回的記錄多餘一條時,就可以使用游標 cursor 游標可以理解為一次訪問乙個的一組記錄。select語句將列提取到游標中,然後根據游標取得記錄。使用游標時需要遵從以下的5個步驟 1 宣告一些變數,用於儲存select語句返回列值 2 宣告游標,並制定select語句 3...

oracle游標的使用

游標 cursor 也稱之為游標,從字面意思理解就是游動的游標。游標是對映在結果集中一行資料上的位置實體。游標是從表中檢索出 結果集,並從中每次指向一條記錄進行互動的機制。cursor 游標名 引數名 資料型別 引數名 資料型別 is select 語句 示例 無參游標 cursor c emp i...

ORACLE游標的使用

1 游標的說明 游標是一種向包含多條資料記錄的結果集中每次讀取一行的機制,逐行處理查詢結果,以程式設計的方式訪問資料庫。可以把游標當成指標,可以指定結果集中的任何位置,然後允許使用者對指定位置的資料進行操作。sql的游標是一種臨時資料庫物件,可以臨時存放資料表中的資料行副本,也可以指向儲存在資料表中...