Oracle PL SQL 學習筆記

2021-08-31 01:59:23 字數 3967 閱讀 4868

一、pl/sql 塊

塊定義語法:

declare

/*定義部分——定義常量、變數、複雜資料型別、游標

*/begin

/*執行部分——pl/sql語句和sql語句

*/exception

/*異常處理部分——處理執行錯誤

*/end;

注:pl/sql中結束輸入使用『/』字元

dbms_output.put_line(「輸出的字串內容」);

dbms_output是oracle提供的系統包;put_line    是該包中的過程,用於輸出字串資訊。當使用dbms_output包時必須要先啟用伺服器輸出

啟用伺服器輸出語句: set serveroutput on

示例:declare

str          varchar(5)    --變數的定義

begin

select name into str from emp        --into是將name的值賦值給str

where empno=$no;    --$no是替代變數

exception

when no_data_found then         --pl/sql預定義的異常型別

dbms_output.put_line(「輸出的字串內容」);

end;

變數定義語法:

變數名 [constant] 資料型別 [not null] [:=|default 預設值或函式]

--constant表示常量;

--:=設定預設值

%type屬性

示例:name    emp.ename%type          --name與emp表中ename列的型別和長度相同

***         name%type                    --***與name型別和長度相同

%rowtype屬性

語法:變數名         表名%rowtype

示例:str   t1%rowtype           

--str變數對應t1表中所有列,並且該表中的所有列的型別與長度相同

pl/sql中使用的操作符

:=           --賦值操作符

=>      --關聯操作符

||           --連線操作符

pl/sql游標

游標定義語法:

cursor              游標名         is    sql語句

游標名%isopen        判斷游標是否已經開啟

游標名%found        sql語句有作用行市,其屬性值為true;

游標名%notfound sql語句沒有作用行市,其屬性值為true;

游標名%rowcount       返回sql語句所作用的總行數

注:游標名預設為『sql』

二、pl/sql控制語句

1、分支語句

if  條件  then     執行操作

elseif 條件then     執行操作

else  執行操作

end  if;

2、多重分支語句

case      表示式

when    要判斷的值        then     執行操作

when    要判斷的值        then    執行操作

else      執行操作

end      case;

3、迴圈語句一

while   條件      loop

執行操作···

end      loop;

4、迴圈語句二

for              變數      in    [reverse]    起點值 ..終點值 loop

執行操作

end              loop;

注:reverse表示由終點值到起點值迴圈; ..是固定格式;

三、           儲存過程

建立過程語法:

create [or replace] procedure procedure_name

[ (argment [ ] type,

argment [ ] type

《型別.變數的說明》

( 注: 不用 declare 語句 )

begin

《執行部分》

exception

《可選的異常處理說明》

end;

l 這裡的in表示向儲存過程傳遞引數,out表示從儲存過程返回引數。而in out 表示傳遞引數和返回引數;

l 在儲存過程內的變數型別只能指定變數型別;不能指定長度;

l 在as或is 後宣告要用到的變數名稱和變數型別及長度;

l 在as或is 後宣告變數不要加declare 語句。

示例:create or replace procedure modetest (

p_inparameter in number,

p_outparameter out number,

p_inoutparameter in out number) is

過程體v_localvariable number; --定義變數

begin

/* 分配p_inparameter給v_localvariable.;p_inparamete表示值*/

v_localvariable := p_inparameter; -- 合法

/* 分配 7 給 p_inparameter. 這是非法的,因為宣告是in ;p_inparamete表示值,即值不能給值*/

p_inparameter := 7; -- 非法

/* 分配7給p_ outparameter. 這是合法的,因為宣告是out;p_ outparameter表示變數 */

p_outparameter := 7; -- 合法

/* 分配 p_outparameter 給 v_localvariable.這是非法的,因為宣告是out;p_ outparameter表示變數,即變數不能給變數*/

v_localvariable := p_outparameter; -- 非法

/* 分配 p_inoutparameter 給 v_localvariable. 這是合法的,因為宣告是in out */

v_localvariable := p_inoutparameter; --合法

/*分配 7 給 p_inoutparameter. 這是合法的,因為宣告是in out */

p_inoutparameter := 7; -- 合法

end modetest;

/過程的呼叫:

exec [ute] 過程名 (引數1 ,引數2…);

四、函式

建立語法:

create [or replace ] function 函式名

[(引數1 [in | out | in out] 引數型別,引數2 [in | out | in out] 引數型別,……)]

return 資料型別

is | as

begin

執行部分

exception

異常處理部分

end [函式名];

五、 包

1、  包規範建立語法

create [or replace] package 程式包名

is | as

procedure 過程名(過程引數列表);

function 函式名(函式引數列表);

……end 程式包名;

2、  包體建立語法

create [or replace] package body 程式包名

is | as

之前定義的函式、過程的具體實現部分

end 程式包名;

3、包的呼叫

exec 程式包名.過程名(引數列表);

Oracle PL SQL學習筆記

游標分類 游標概念 與游標相關的語法型別 建立游標 如同宣告任何其他變數一樣 cursor cursor name is sql statement 開啟與關閉游標 開啟游標 open cursor arg arg 關閉游標 close cursor 取資料 fetch cursor into va...

Oracle PL SQL 學習筆記(四)

3.2定義並使用變數 pl sql資料型別 標量 scalar 型別 復合 composite 型別 參照 reference 型別和lob larger object 型別。3.2.1標量變數 1.常用標量型別 1 varchar2 n 定義可變長度的字串,長度 4000位元組 2 char n ...

Oracle PL SQL 學習筆記(二)

二 pl sql 開發工具 2.1sql plus 1.在命令列執行sql plus 語法 sqlplus username password server 其中,username使用者名稱,password密碼,server指定主機字串。當連線到本地資料庫時,不需要提供網路服務名。d sqlplu...