Oracle基礎 十二 可程式設計SQL

2021-09-26 20:33:27 字數 4270 閱讀 3005

pl/sql : pl/sql是 oracle 是在標準sql語句上的過程性擴充套件.pl/sql 不僅允許嵌入sql語句,還可以定義變數和常量.允許使用條件語句和迴圈語句,異常處理

pl/sql 優勢:

1.支援物件導向程式設計,支援自定義型別,例項化,繼承,程式塊中的過載

2.更好的提公升程式效能,pl/sql把乙個pl/sql語句塊統一進行編譯後執行,同時還可以把

編譯好的sql塊儲存到oracle的伺服器上面,可以重複呼叫,而sql妃過程語句,只能一條一條執行.pl/sql的執行快速高效

3.良好的移植性 : 使用pl/sql編寫應用程式,可以移植到任何作業系統上面,同時可以編寫程式庫,在不同的環境中重用.

4.安全性 : 可以使用許可權控制是否可以訪問儲存過程.

需要掌握

1.掌握pl/sql程式結構

2.掌握流程空指標語法

3.掌握復合變數的語法

4.掌握游標的用法

5.會使用異常

過程/函式/無名塊,他們之間可以互相巢狀

1.當定義的變數的時候,建議使用v_作為字首,v_sal,v_job…

2.當定義常量的時候,建議使用c_作為字首

3.定義游標的時候,通常使用_cursor作為字尾, dept_cursor

4.定義異常的時候,使用e_作為字首

pl/sql程式塊

pl/sql 分為兩種 : 無名塊,命名塊 : 函式,過程,包,觸發器…

pl/sql 有3部分組成:定義部分,執行部分,異常處理部分

定義部分:定義變數,常量,游標,異常,復合資料等型別

執行部分 : 實現用用模組的一些功能,dml,輸出語句,判斷…

異常部分 : 處理異常的**,當程式出現異常的時候執行.

[declare

... -- 定義部分

]begin

.. -- 執行部分

[ exception

... -- 異常處理部分

]end;

declare,begin,exception 後面都沒有分號,而end後則必須要帶分號;

declare

-- 定義

num number; -- 定義變數

begin

num := 6+6; -- 為變數賦值

dbms_output.put_line('6 + 6 = '||num);--輸出變數

exception -- 異常處理

when others then

dbms_output.put_line('出現異常了!');

end;

pl/sql資料型別有標量型別,復合型別,參照資料型別,lob資料型別

標量只能存放單個數值,最常用的變數都是標量.

1.變數名以字母開頭,不區分大小寫

2.變數名由字母,數字,$,_組成

3.變數長度最多30個字元

4.變數名中不能有空格

5.不能使用關鍵字

variable_name [constant] data_type not null [default | := value]

variable_name : 變數名

constant : 是否是常量

data_type : 資料型別(char,number,date,varchar2)

not null : 表示該變數非空,必須指定預設值

default 或 := value : 給變數賦值預設值

declare

c_id constant integer := 66;

v_gender char(1);

v_num number(5,2) default 66.6;

v_date date;

isfindshed boolean default true;

begin

end;

=	等於(邏輯判斷)

<>,!=,~=,^= 不等於

:= 賦值運算子

=> 關係號

.. 範圍運算子

|| 字串連線

-- 單行注釋

/* 多行注釋

*/declare

/*c_id constant integer := 66;

v_gender char(1);

v_num number(5,2) default 66.6;

v_date date;

isfindshed boolean default true;

*/ v_sal number;

begin

select sal into v_sal from emp where empno = 7788;

dbms_output.put_line(v_sal);

end;

condition1,condition2 只能是boolean表示式

statements1,statements2,statements3 是pl/sql語句,如果condition1為true,執行statements1…

if condition1 then

statements1

elsif condition2 then

statements2

else

statements3

end if;

if語句基本選擇結構,每乙個if語句都有then,以if開頭的語句不能跟結束符合,每乙個if語句以 end if結束.每乙個if只能有1個else

declare

n1 number := 100;

n2 number := 50;

begin

--查詢部門20人數和30人數哪乙個部門人數多,輸出 : 20 部門多少人 大於 30部門 多少人.30

-- 查詢 20 和 30 部門的人數,進行

select count(1) into n1 from emp where deptno = 20;

select count(1) into n2 from emp where deptno = 30;

if n1 > n2 then

dbms_output.put_line('n1 大於 n2!');

else

dbms_output.put_line('n1 小於 n2!');

end if;

end;

基本迴圈,while迴圈,for迴圈

基本迴圈

loop

statements

exit [when condition]

end loop;

至少會被執行一次.

2.while 迴圈

while condition loop

end loop;

declare

total number :=60;

v_count number :=1;

begin

while total < 50 loop

total := total+total;

v_count:=v_count+1;

end loop;

dbms_output.put_line('v_count = '||v_count ||'次結果:'||total);

end;

3.for迴圈

for loop_variable in [reverse] lower…upper loop

…end loop;

loop_variable : 指定迴圈變數

reverse : 每次遞減輸出.

lower : 迴圈的起始值

upper : 迴圈的終止值

declare 

i integer;

begin

for i in reverse 1..20 loop

dbms_output.put_line(i);

end loop;

end;

goto 和 null

goto : 跳轉結構.使用goto可以跳轉到指定的設定標籤"<<>>"建立標籤

LILYGO T Wristband 可程式設計的手環

因為最近開發一款大眾化的健康產品,購買了一款可以自己程式設計的手環。其實現在銷售的眾多手環就是這樣的,只是沒有開放出來大家程式設計而已。這是我拆開進行程式設計的樣子 除了程式設計能力限制以外,它的長電版105mah,也受不了超過1個半小時。另外,還沒來得急研究抬手顯示等 它的程式設計接線口就壞掉了,...

可程式設計記憶體區

堆區 亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意大小的記憶體,程式設計師自己負責在適當的時候用free或delete釋放記憶體。動態記憶體的生存期可以由我們決定,如果我們不釋放記憶體,程式將在最後才釋放掉動態記憶體。但是,良好的程式設計習慣是 如果某動態記憶體不再使用,需要將...

可程式設計並行介面8255

8255是通用的並行介面晶元,通過程式設計實現多種工作方式,滿足不同應用需求。8255a是intel公司生產的可程式設計並行i o介面晶元,有3個8位並行i o口。具有3個通道3種工作方式的可程式設計並行介面晶元 40引腳 其各口功能可由軟體選擇,使用靈活,通用性強。8255a可作為微控制器與多種外...