国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

PL/SQL編程基礎

2019-11-15 00:42:34
字體:
來源:轉載
供稿:網友
PL/SQL編程基礎1. PL/SQL塊的基礎結構

DECLARE

/*

* 定義部分——定義常量、變量、復雜數據類型、游標、用戶自定義異常

*/

BEGIN

/*

* 執行部分——PL/SQL語句和SQL語句

*/

EXCEPTION

/*

* 異常處理部分——處理運行錯誤

*/

END;

/*塊結束標記 */

2. 使用變量和常量

1) PL/SQL 塊中可以使用變量和常量a. 在聲明部分聲明,使用前必須先聲明b. 聲明時必須指定數據類型,每行聲明一個標識符c. 在可執行部分的 SQL 語句和過程語句中使用2) 聲明變量和常量的語法:

identifier [CONSTANT] datatype [NOT NULL]

[:= | DEFAULT exPR];

3) 給變量賦值有兩種方法:a. 使用賦值語句 :=b. 使用 SELECT INTO 語句例如:

DECLARE

v_name varchar2(10);

BEGIN

select dname into v_name

from dept

where deptno = 90;

dbms_output.put_line('dname:'|| v_name);

EXCEPTION WHEN NO_DATA_FOUND THEN

dbms_output.put_line('沒有該部門');

END;

3. PL/SQL塊的類型

1) 匿名塊前面各個示例執行的都是沒有名稱的匿名塊。2) 子程序a. 過程:能夠完成一系列的增刪改查的動作的“方法”。示例:更新指定姓名員工工資,姓名不區別不大小寫。

create or replace procedure update_sal

(p_ename VARCHAR2, p_newsal NUMBER)

AS

BEGIN

UPDATE emp SET sal = P_newsal

WHERE lower(ename) = lower(P_ename);

commit;

END;

調用:

exec update_sal(‘scott’, 2000); --SQL*PLUS中的命令

call update_sal(‘SCOTT’, 2000); --java中調用的語句

b. 函數:能夠完成計算并返回計算結果,注意不能修改數據。示例:計算一個數的兩倍后并返回。

create or replace function f_add(a number )

return number

as

begin

return a*2;

end;

調用:

select f_add(2) from dual;

select f_add(deptno) from dept;

c. 觸發器:當觸發器所監控的表的數據發生改變(增刪改)時自動執行的代碼塊。d. 包:包用于邏輯“包含”相關的過程和函數,它由包頭和包體兩部分組成。示例:將前面的函數f_add定義在包中并調用。

create or replace package my_bao is

function f_add(a number ) return number;

end;

/

create or replace package body my_bao is

function f_add(a number ) return number

as

begin

return a*2;

end;

end;

/

調用:select my_bao.f_add(2) from dual;

4. 標量變量1) 標量變量a. 標量變量是指只能存入單個數值的變量。b. 標量變量必須先定義后使用。2) 常用的標量類型a. VARCHAR2(n):該數據類型用于定義可變長度的字符串 ,n<=4000。b. CHAR(n):該數據類型用于定義固定長度的字符串,n<=2000。c. NUMBER(總位數, 小數位):定義整數或小數。d. DATE:該數據類型用于定義日期和時間數據。e. BOOLEAN:該數據用于定義布爾變量,其變量的值為TRUE、FALSE或NULL。 注意此類型只能在PL/SQL中使用,表列是沒有此類型的。f. %type:通常用于指定表的某個列的數據類型,可以理解為“的類型”(小技巧:%讀“的”)。示例:打印部門編號為10的部門名稱。

declare

v_name dept.dname%type;

begin

select dept.dname into v_name

from dept

where deptno = 10;

dbms_output.put_line('dept = '||v_name);

end;

運行結果:

dept = ACCOUNTING

5. 復合變量

1) 復合變量a. 復合變量是指用于存放多個值的變量。b. 在使用復合變量時,必須先用TYPE進行定義“新的數據類型”,然后再用這些新的類型定義新的變量。2) 復合數據類型a. 記錄類型:可以簡單理解為具有多個“屬性”的變量。

DECLARE

TYPE emp_record_type IS RECORD (

name emp.ename%TYPE,

salary emp.sal%TYPE);

emp emp_record_type;

BEGIN

SELECT ename,sal,job into emp

FROM emp WHERE empno=7788;

dbms_output.put_line('雇員名:' || emp .name);

END;

b. 索引表類型PL/SQL索引表類似Collection接口,或者看成是一個1維數組也可以。不連續索引可為負數動態增長語法:type xx is table of 類型 index by 整型c. 嵌套表類型d. 變長數組類型e. 集合類型6. 引用變量1) 引用變量引用變量是指用于存放數據地址(指針)的變量。2) 好處通過使用引用變量,可以使得應用程序共享相同對象,從而降低占用空間。3) 引用變量類型a. REF CURSOR:引用游標類型先定義游標變量,再定義該游標使用的select語句。具體將在后面游標講解更深入講解。b. REF obj_type:引用對象類型編寫對象類型應用時,為了共享相同對象,可以使用REF引用對象類型,REF實際是指向對象實例的指針。

7. LOB變量

1) LOB變量LOB變量是指用于存儲大批量數據的變量。2) 分類a. 內部LOB:存儲在數據庫中,并且支持事務操作(提交、回退、保存點)。CLOB:存儲大批量字符數據(指定字符集)NCLOB:存儲大批量字符數據 (所有字符集)BLOB:存儲大批量二進制數據b. 外部LOB:只有一種類型,該類型的數據被存儲在操作系統文件中,并且不支持事務操作。BFILE:存儲指向操作系統文件的指針

8. 使用SQL*Plus綁定變量

a. 當在SQL*Plus中與PL/SQL塊之間進行數據交互時,需要使用SQL*Plus綁定變量來完成。b. 當在PL/SQL中引用非PL/SQL變量時,必須要在非PL/SQL變量前加冒號(“:”)。

SQL> var name varchar2(10);

SQL> BEGIN

2 SELECT ename INTO :name FROM emp

3 WHERE empno = 7788;

4 end;

5 /

SQL> print name;

name

---------

SCOTT

9. PL/SQL詞匯單元

當編寫PL/SQL塊時,每個PL/SQL塊都包含多行代碼,而每行代碼又是由多個合法單元組成的,這些合法單元被稱為詞匯單元。

1) PL/SQL詞匯單元分類a. 標識符通過使用標識符,可以定義常量、變量、異常、顯式游標、游標變量、參數、子程序以及包的名稱。示例:declare v_name emp.ename%type;b. 字面量寫在代碼各種具體的數值,如數字、字符、字符串、日期值或布爾值 。示例: v_name := 'lovo';c. 分隔符分隔符是指具有特定含義的單個符號(+、-、*、/)或組合符號( := 、>=)。示例: a := 10 + 20 ;3) 注釋a. 單行注釋 --單行注釋b. 多行注釋 /*多行注釋*/示例

DECLARE

--定義v_sal變量

v_sal NUMBER(6,2);

BEGIN

/*

給變量賦值,

然后打印此變量

*/

v_sal := 1000;

dbms_output.put_line(v_sal);

END;

10.PL/SQL代碼編寫規則

1)好處使用適當的編寫規則,可以提高代碼的可讀性,降低程序維護難度。2) 規則A. 標識符命名規則a. v_變量名 定義變量b. e_變量名 定義異常c. &hellip;….B. 大小寫規則代碼不區別大小寫,但建議關鍵字大寫。C. 代碼縮進D. 嵌套塊和變量范圍外部塊能夠訪問內部塊的變量,反之則不能。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 全椒县| 达孜县| 曲阜市| 仲巴县| 静乐县| 阿拉尔市| 清水河县| 海阳市| 澄城县| 独山县| 香格里拉县| 色达县| 玉门市| 马鞍山市| 靖远县| 和林格尔县| 延边| 漳平市| 海伦市| 鄂托克前旗| 靖州| 江西省| 保定市| 汝城县| 清徐县| 金川县| 杭州市| 宜都市| 桃江县| 皋兰县| 沛县| 潼南县| 库伦旗| 紫阳县| 祁门县| 宝清县| 通榆县| 高平市| 佛教| 唐河县| 库尔勒市|