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可作為微控制器與多種外...