oracle中函數,遊標的使用____靜態函數

來源:互聯網
上載者:User

oracle中函數和遊標的使用

--建立函數並且調用create function fun1(v_in_ename varchar2)return number isv_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) isbegin  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);beginselect ename,sal into v_ename,v_sal from empwhere 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;beginselect ename,sal into v_ename,v_sal from empwhere 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_recordv_emp_record zy_emp_record;beginselect ename,sal,job into v_emp_recordfrom 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;--取出遊標指向的每行資料,用迴圈語句loopfetch 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;--取出遊標指向的每行資料,用迴圈語句loopfetch 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;


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.