PL/SQL是ORACLE對標准數據庫語言的擴展
PL/SQL的優點
從版本
PL/SQL的優點如下
PL/SQL塊結構
PL/SQL是一種塊結構的語言
聲明部分(Declaration section)
聲明部分包含了變量和常量的數據類型和初始值
執行部分(Executable section)
執行部分是PL/SQL塊中的指令部分
異常處理部分(Exception section)
這一部分是可選的
PL/SQL塊語法
[DECLARE]
BEGIN
[EXCEPTION]
END
PL/SQL塊中的每一條語句都必須以分號結束
PL/SQL塊的命名和匿名
PL/SQL程序塊可以是一個命名的程序塊也可以是一個匿名程序塊
命名程序塊可以出現在其他PL/SQL程序塊的聲明部分
PL/SQL程序塊可背獨立編譯並存儲在數據庫中
函數
函數是命名了的
FUNCTION name [{parameter[
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name]
過程
存儲過程是一個PL/SQL程序塊
PROCEDURE name [(parameter[
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers ]
END [name]
包(package)
包其實就是被組合在一起的相關對象的集合
包由兩個部分組成
觸發器(trigger)
觸發器與一個表或數據庫事件聯系在一起的
變量和常量
變量存放在內存中以獲得值
聲明變量
變量一般都在PL/SQL塊的聲明部分聲明
聲明變量的語法如下
Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]
注意:可以在聲明變量的同時給變量強制性的加上NOT NULL約束條件
給變量賦值
給變量賦值有兩種方式
X:=
Y=Y+(X*
SELECT SUM(SALARY)
INTO TOTAL_SALARY
FROM EMPLOYEE
WHERE DEPT=
常量
常量與變量相似
ZERO_VALUE CONSTANT NUMBER:=
這個語句定了一個名叫ZERO_VALUE
標量(scalar)數據類型
標量(scalar)數據類型沒有內部組件
表
表
Datatype
Range
Subtypes
description
BINARY_INTEGER
NATURAL
NATURAL
NPOSITIVE
POSITIVEN
SIGNTYPE
用於存儲單字節整數
要求存儲長度低於NUMBER值
用於限制范圍的子類型(SUBTYPE):
NATURAL:用於非負數
POSITIVE:只用於正數
NATURALN:只用於非負數和非NULL值
POSITIVEN:只用於正數
SIGNTYPE:只有值:
NUMBER
DEC
DECIMAL
DOUBLE
PRECISION
FLOAT
INTEGERIC
INT
NUMERIC
REAL
SMALLINT
存儲數字值
number[([
缺省的精度是
PLS_INTEGER
與BINARY_INTEGER基本相同
表
datatype
rang
subtype
description
CHAR
最大長度
CHARACTER
存儲定長字符串
LONG
最大長度
存儲可變長度字符串
RAW
最大長度
用於存儲二進制數據和字節字符串
LONGRAW
最大長度
與LONG數據類型相似
ROWID
與數據庫ROWID偽列類型相同
VARCHAR
最大長度
STRINGVARCHAR
與VARCHAR數據類型相似
表
datatype
range
description
BOOLEAN
TRUE/FALSE
存儲邏輯值TRUE或FALSE
DATE
存儲固定長的日期和時間值
LOB數據類型
LOB(大對象
操作符
與其他程序設計語言相同
算術操作符如表
operator
operation
+ 加
/ 除
* 乘
** 乘方
關系操作符主要用於條件判斷語句或用於where子串中
operator
operation
<
小於操作符
<=
小於或等於操作符
>
大於操作符
>=
大於或等於操作符
=
等於操作符
!=
不等於操作符
<>
不等於操作符
:=
賦值操作符
表
operator
operation
IS NULL
如果操作數為NULL返回TRUE
LIKE
比較字符串值
BETWEEN
驗證值是否在范圍之內
IN
驗證操作數在設定的一系列值中
表
operator
operation
AND
兩個條件都必須滿足
OR
只要滿足兩個條件中的一個
NOT
取反
執行部分
執行部分包含了所有的語句和表達式
所有的SQL數據操作語句都可以用於執行部分
執行一個PL/SQL塊
SQL*PLUS中匿名的PL/SQL塊的執行是在PL/SQL塊後輸入/來執行
declare
v_comm_percent constant number:=
begin
update emp
set comm=sal*v_comm_percent
where deptno=
end
SQL> /
PL/SQL procedure successfully completed
SQL>
命名的程序與匿名程序的執行不同
create or replace procedure update_commission
(v_dept in number
begin
update emp
set comm=sal*v_percent
where deptno=v_dept;
end
SQL>/
Procedure created
SQL>execute update_commission(
PL/SQL procedure successfully completed
SQL>
如果在另一個命名程序塊或匿名程序塊中執行這個程序
declare
v_dept number;
begin
select a
into v_dept
from emp a
where job=
update_commission(v_dept);
end
SQL>/
PL/SQL procedure successfully completed
SQL>
控制結構
控制結構控制PL/SQL程序流程的代碼行
語法和用途
IF
語法
IF condition THEN
Statements
Statements
END IF
IF語句判斷條件condition是否為TRUE
IF
語法:
IF condition THEN
Statements
Statements
ELSE
Statements
Statements
END IF
如果條件condition為TRUE
IF 可以嵌套
if (a>b) and (a>c) then
g:=a;
else
g:=b;
if c>g then
g:=c;
end if
end if
IF
語法
IF condition
statement
ELSIF condition
statement
ELSIF condition
statement
ELSE
statement
END IF;
statement
如果條件condition
循環控制
循環控制的基本形式是LOOP語句
LOOP
statements;
END LOOP
LOOP和END LOOP之間的語句無限次的執行顯然是不行的
X:=
LOOP
X:=X+
IF X>
EXIT;
END IF
END LOOP;
Y:=X;
此時Y的值是
EXIT WHEN語句將結束循環
X:=
LOOP
X:=X+
EXIT WHEN X>
X:=X+
END LOOP;
Y:=X;
WHILE
WHILE
X:=
WHILE X<=
X:=X+
END LOOP;
Y=X;
FOR
語法
FOR counter IN [REVERSE] start_range
statements;
END LOOP;
LOOP和WHILE循環的循環次數都是不確定的
X:=
FOR v_counter in
x:=x+
end loop
y:=x;
如果要退出for循環可以使用EXIT語句
標簽
用戶可以使用標簽使程序獲得更好的可讀性
標記程序塊
<>
[DECLARE]
BEGIN
[EXCEPTION]
END label_name
標記循環
<>
LOOP
<>
loop
<>
loop
EXIT outer_loop WHEN v_condition=
end loop innermost_loop;
END LOOP inner_loop;
END LOOP outer_loop;
GOTO語句
語法
GOTO LABEL;
執行GOTO語句時
X
FOR V_COUNTER IN
IF V_COUNTER =
GOTO end_of_loop
END IF
X:=X+
<>
NULL
END LOOP
Y:=X;
注意
嵌套
程序塊的內部可以有另一個程序塊這種情況稱為嵌套
《OUTER BLOCK》
DECLARE
A_NUMBER INTEGER
B_NUMBER INTEGER
BEGIN
<>
DECLARE
C_NUMBER INTEGER
B_NUMBER NUMBER(
BEGIN
C_NUMBER:=A_NUMBER;
C_NUMBER=OUTER_BLOCK
END SUB_BLOCK;
END OUT_BLOCK;
小結
我們在這篇文章中介紹了PL/SQL的基礎語法以及如何使用PL/SQL語言設計和運行PL/SQL程序塊
Oracle常用Script
SQL> select * from tab;
SQL> create table b as select * from a where
SQL> create table b(b
SQL> col tablespace format a
SQL> select b
b
b
b
(b
sum(nvl(a
sum(nvl(a
from dba_free_space a
where a
group by b
order by b
/
dba_free_space
dba_data_files
SQL> col segment format a
SQL> SELECT SEGMENT_NAME
SQL> col file_name format a
SQL> select tablespace_name
SQL> show user
SQL> select
SQL> select 列
SQL> select concat(列
SQL> select to_char(sysdate
SQL> copy from user
SQL> create view a as select b
SQL> grant connect
SQL> conn test/test
CHAR
區別
何時該用CHAR
CHAR與VARCHAR
VARCHAR
VARCHAR
From:http://tw.wingwit.com/Article/program/Oracle/201311/16905.html