說明: 使用oracle10.2 scott方案下的emp表做的練習,所有塊都驗證過
注意: 要先打開oracle的打印選項
聲明: 多處參照韓順平oracle視頻,所以命名基本出現(xiàn)為sp_..
這里用的都是塊,如果要寫成過程,請參照下面的語法,調用方法為
exec 過程名
call 過程名 2種
- --過程的語法 更改某個人的工資
- create or replace procedure sp_pro3(spName varchar2,newSal number) is
- begin
- update emp set sal=newSal where ename=spName;
- end;
- --包 生成一個包的語法
- create or replace package abc is
-
- end;
--有了塊之后我們很容易就可以進行封裝,所以為了簡單起見使用塊來學習和試驗
--如何使用標量****************************************常量,一般變量
- --輸入員工號得到工資等信息
- --稅率為0.03
- declare
- --常量用c開頭,變量讓v開頭
- c_tax_rate number(7,2):=0.03;
- v_ename varchar(10);
- v_sal number(7,2);
- v_tax_sal number(7,2);
- begin
- select ename,sal into v_ename,v_sal from emp where empno=&no;
- --計算所得稅,賦值符號一定不能錯
- v_tax_sal:=v_sal*c_tax_rate;
- --輸出信息
- dbms_output.put_line('此員工的信息如下:'||v_ename||' 工資:'||v_sal||' 稅:'||v_tax_sal);
- end;
--使用%type方式復制變量類型,減少錯誤。
v_ename varchar(10);
--可以寫為
v_ename emp.ename%type;
- --讓我們對上述的代碼改寫下
- declare
- c_tax_rate number(7,2):=0.03;
- v_ename emp.ename%type;
- v_sal emp.sal%type;
- v_tax_sal emp.sal%type;
- begin
- select ename,sal into v_ename,v_sal from emp where empno=&no;
- v_tax_sal:=v_sal*c_tax_rate;
- dbms_output.put_line('此員工的信息如下:'||v_ename||' 工資:'||v_sal||' 稅:'||v_tax_sal);
- end;
--復合變量的使用方法***************************************記錄和表
--記錄類似高級語言中的結構體,表相當于數組
- --使用記錄變量的實例
- declare
- --定義一個pl/sql記錄類型
- type emp_record_type is record(name emp.ename%type,sal emp.sal%type);
- --給記錄一個別名
- sp_record emp_record_type;
- begin
- select ename,sal into sp_record from emp where empno=&no;
- --獲取記錄里的信息的方法
- dbms_output.put_line('此員工的信息如下:'||sp_record.name||' 工資:'||sp_record.sal);
- end;
- --表類型使用的案例(接受一個值)
- declare
- --定義一個table類型的變量,存放的類型是emp.ename%type
- --使用的下標是整數型的
- type sp_table_type is table of emp.ename%type index by binary_integer;
- sp_table sp_table_type;
- begin
- --下標要對應才可以,可以自己定義,這樣寫只能取出一個記錄
- select ename into sp_table(0) from emp where empno=7788;
- dbms_output.put_line('員工名'||sp_table(0));
- end;
--參照變量(使用最多的)****************************游標和對象類型
--一般都是用游標變量cursor
--案例1 寫一個塊 輸入部門號得到所有所屬部門人員的信息(姓名和工資)
- declare
- --定義游標類型 sp_cursor
- type sp_emp_cursor is ref cursor;
- --定義游標變量
- test_cursor sp_emp_cursor;
- --定義變量接受姓名和工資
- v_ename emp.ename%type;
- v_sal emp.sal%type;
- begin
- --把一個游標和select結合
- open test_cursor for select ename,sal from emp where deptno=&no;
- --循環(huán)取出數據,循環(huán)結構使用loop結構
- loop
- --fetch是取出游標的意思
- fetch test_cursor into v_ename,v_sal;
- --判斷退出的條件,沒有就是死循環(huán)了哦
- exit when test_cursor%notfound;
- --輸出
- dbms_output.put_line('姓名:'||v_ename||' 工資:'||v_sal);
- end loop ;
- end ;
- 結果
-
-
- 姓名:ALLEN 工資:1600
- 姓名:WARD 工資:1250
- 姓名:MARTIN 工資:1250
- 姓名:BLAKE 工資:2850
- 姓名:TURNER 工資:1500
- 姓名:JAMES 工資:950
-
- PL/SQL procedure successfully completed
常用的就是標量 記錄 和游標了。 只要能取到值,其他的業(yè)務邏輯就可以使用變量來實現(xiàn)了。
本文出自 “orangleliu筆記本” 博客,請務必保留此出處http://blog.csdn.NET/orangleliu/article/details/38309417
|