Oracle數據庫的PLSQL
PLSQL |
一:plsql是procedural language sql:過程化sql語言,是oracle數據庫中可以實現一些復雜的計算和功能。
其實是在基本的sql語言中,加入了循環。判斷等邏輯的一種數據庫編程方式,運行在oracle數據庫上。
二:作用
更高效率的的進行大數據量的運算。
三:優缺點
優點:效率高
缺點:編寫與維護性低,開發測試效率低,非面向對象語言。
四:格式
基本格式:
declare
--變量的聲明區域
最簡格式:
/
begin
業務邏輯區域
--exception
end
/
說明:變量的聲明
變量名 類型名:=值;
不賦值時,變量的默認值為null,作運算時,null與任何值運行的結果都是null。
==表示判斷是否相等
*/*必須要存在
plsql只是一個定義好的匿名代碼塊,只能在oracle數據庫中編譯和運行一次,不會存儲在oracle中,如果存儲,需要定義成存儲過程,函數,觸發器。
五:練習
-->使用最簡格式,輸出打印"Hello plsql"。
set serveroutput on; --開啟輸出功能
begin
dbms_output.put_line(‘Hello plsql‘);
end;
/
-->顯示 姓名 年齡 出生年月日
begin
dbms_output.put_line(‘lyr‘);
dbms_output.put_line(‘20‘);
dbms_output.put_line(‘1997-3-6‘);
end;
/
六:plsql的使用
1.-->註釋,--單行註釋,/*.....*/多行註釋。
2.
declare
變量名 類型
變量名 類型:=值;
begin
end;
/
七:練習
-->定義一個a,b,c,a=5,b=6,c=a+b,輸出c的值。
declare
a number:=5;
b number:=6;
c number;
begin
c:=a+b;
dbms_output.put_line(c)
end;
/
-->定義變量name,age,賦值輸出。
declare
name varchar2(20);
age number(2);
begin
name:=‘lyr‘;
age:=20;
dbms_output.put_line(‘name=‘||name||‘ age=‘||age);
end;
/
判斷 |
1:基本格式
if 條件 then
..
elsif 條件 then
..
else
..
end if;
2:練習
-->定義一個變量gender 賦值,如果為‘M‘,輸出男,如果為‘F‘,輸出女,否則輸出性別不詳。
declare
gender varchar(20);
begin
gender:=‘M‘;
if gender=‘M‘ then
dbms_output.put_line(‘男‘);
elsif gender=‘F‘ then
dbms_output.put_line(‘女‘);
else
dbms_output.put_line(‘性別不詳‘);
end if;
end;
/
loop循環 |
1:基本格式
loop
循環內容
exit when 結束條件;
end loop;
2:練習
-->輸出1-10。
declare
i number:=1;
begin
loop
dbms_output.put_line(i);
i:=i+1;
exit when i>10;
end loop;
end;
/
while循環 |
1:基本格式
while 條件 loop
業務邏輯
循環變量改變
end loop;
2:練習
-->使用while循環計算100以內奇數的和。
declare
i number:=1;
s number:=0;
begin
while i<101
loop
s:=s+i;
i:=i+2;
end loop;
dbms_output.put_line(s);
end;
/
for循環 |
1:基本格式
for 變量 in 集合 loop
end loop
說明:集合必須是數字集合,1..10表示1~10的整數。
2:練習
-->使用for循環輸出1-10。
begin
for i in 1..10
loop
dbms_output.put_line(i);
end loop;
end;
/
PLSQL使用DML和TCL |
1:沒有特殊情況,直接使用。
2:練習
--> 對表dept,增加一條數據 100,‘qqq‘,‘cc‘,修改40號部門的地址為南關。
begin
insert into dept values(100,‘qqq‘,‘cc‘);
update dept set loc=‘南關‘ where deptno=40;
end;
/
PLSQL使用DQL |
1:說明
plsql中使用DQL語言,不只是為了查詢,因為如果查詢的話,普通的sql語句比較方便,而plsql中使用DQL目的是將查詢的數據封裝到變量中,進行其他的邏輯運算。
--返回單行數據
select colName1,colName2 into 變量1,變量2 from ....
2:練習
查詢10號部門的名稱和地址封裝到變量a和b進行拼接輸出。
declare
a varchar2(20);
b varchar2(20);
begin
select dname,loc into a,b from dept where deptno=10;
dbms_output.put_line(a||‘ ‘||b);
end;
/
--返回多行數據
1:使用遊標
會將多條數據封裝到遊標中,相當於java的ResultSet。
遊標默認會在第一行,每fetch一次,遊標就會向下行移動,當成功移到下一行時,遊標就有一個狀態:found,當遊標移到最後一行時,再次fetch時,不會移動,但是狀態變為not found。
2:格式
declare
cursor 遊標名 is select 語句....;
變量 類型
begin
open 遊標名;
loop
fetch 遊標名 into 變量1,變量2...
exit when 結束條件(遊標民%not found)
end loop;
close 遊標名;
end;
/
3:練習
-->輸出顯示10號部門的員工姓名,職位,工資。
declare
cursor c is select ename,job,sal from emp where deptno=10;
na varchar2(20);
j varchar2(20);
sal number(20);
begin
open c;
fetch c into na,j,sal;
while (c%found)
loop
dbms_output.put_line(na||‘ ‘||j||‘ ‘||sal);
fetch c into na,j,sal;
end loop;
close c;
end;
/
--自己練習: set serveroutput on; declare begin dbms_output.put_line(‘dsada‘); end; / declare a number; b number; c number; begin a:=1; b:=2; c:=a+b; dbms_output.put_line(c); end; / declare i number; j number; begin i:=&請輸入一個數字; j:=&請輸入一個數字; dbms_output.put_line(i+j); end; / declare a number; b number; begin a:=&請輸入一個數字; b:=&請輸入一個數字; if a>b then dbms_output.put_line(‘a>b‘); elsif a<b then dbms_output.put_line(‘a<b‘); else dbms_output.put_line(‘a=b‘); end if; end; / declare i number; n number; begin i:=1; n:=&請輸入一個數字; loop dbms_output.put_line(i); i:=i+1; exit when i>n; end loop; end; / declare i number; n number; s number; begin i:=1; n:=&請輸入最大值N; s:=0; loop s:=s+i; i:=i+1; exit when i>n; end loop; dbms_output.put_line(s); end; / declare n number; i number; begin i:=1; n:=&請輸入上限; while i<n loop dbms_output.put_line(i); i:=i+1; end loop; end; / declare i number; n number; begin i:=0; n:=&請輸入一個數字; for i in 1..n loop dbms_output.put_line(i); end loop; end; / begin insert into dept values(90,‘qqq‘,‘cc‘); update dept set loc = ‘dasda‘; rollback; end; / select * from dept; declare a varchar2(20); b varchar2(20); begin select dname,loc into a,b from dept where deptno =10; dbms_output.put_line(a||‘ ‘ ||b); end; / declare a dept.dname%type; b dept.loc%type; begin select dname,loc into a,b from dept where deptno=10; dbms_output.put_line(a||‘ ‘||b); end; / declare cursor c is select ename,sal,empno from emp where deptno=10; na varchar2(20); sa number(20); emp number(20); begin open c; fetch c into na,sa,emp; while (c%found) loop dbms_output.put_line(na||‘ ‘||sa||‘ ‘||emp); fetch c into na,sa,emp; end loop; close c; end; / declare cursor c is select ename,job,sal from emp where deptno=10; na varchar2(50); j varchar2(50); sal number(10); begin open c; fetch c into na,j,sal; while(c%found) loop dbms_output.put_line(na||‘ ‘||j||‘ ‘||sal); fetch c into na,j,sal; end loop; close c; end; / declare cursor c is select ename,sal,mgr from emp; name varchar2(74); sal number; mgr number; begin open c; fetch c into name,sal,mgr; while c%found loop dbms_output.put_line(name||‘ ‘||sal||‘ ‘||mgr); fetch c into name,sal,mgr; end loop; close c; end; / declare cursor c is select deptno from dept; d number; begin open c; fetch c into d; loop dbms_output.put_line(d); fetch c into d; exit when c%notfound; end loop; end; / declare cursor c is select ename from emp;zz name varchar2(50);; begin open c; dbms_output.put_line(c%notfound); fetch c into name; while c%found loop dbms_output.put_line(name); fetch c into name; end loop; close c; end; /練習
---恢復內容結束---
Oracle數據庫的PLSQL