變數是一個給定的儲區域,程式可以操空的名稱。PL/SQL每個變數具有一個特定的資料類型,它決定了大小和變數的存儲器的值,可以說儲存器和設定的操作可以加注到可變內被儲存的範圍內。
一個PL/SQL變數的名稱由一個字母後面可以跟多個字母,數字,美元符號,下底線和數字符號,並不得超過30個字符。預設情況下,變數名是不區分大小寫。不能使用PL/SQL保留關鍵字作為變數名稱。
PL/SQL程式語言允許定義各種類型的變數,如,日期時間,記錄,集合等資料類型將在本章後面的章節涉及,這裡只討論基本變數類型。
PL/SQL變數宣告
PL/SQL變數必須在宣告部分作為一個全局變數宣告。當宣告一個變數,PL/SQL的變數值分配記憶底並由變數名稱標識存儲位置。
宣告一個變數的語法是:
variable_name [CONSTANT] datatype
[NOT NULL] [:= | DEFAULT initial_value]
其中,變數名是在PL/SQL一個有效的標識符,資料類型必須是有效PL/SQL資料類型,或者在上一章中討論的任何用戶定義的資料類型。它們的定義一些有效變數宣告如下:
sales number(10, 2);
pi CONSTANT double precision := 3.1415;
name varchar2(25);
address varchar2(100);
當提供一個大小,縮放或精度限製的資料類型,它被稱為約束宣告。受限宣告要比不受約束的宣告更少的內存。例如:
sales number(10, 2);
name varchar2(25);
address varchar2(100);
在PL/SQL中初始化變數
當宣告一個變數,PL/SQL賦予默認設置為NULL值。如果想初始化NULL值以外的變數,可以宣告中這樣做,使用以下兩種的:
·
使用 DEFAULT 關鍵字
·
使用 assignment 操作符
例如:
counter binary_integer := 0;
greetings varchar2(20) DEFAULT 'Have a
Good Day';
還可以指定一個變數不應該使用NOT NULL約束NULL值。如果使用NOT
NULL約束,必須明確指定該變數的初始值。
這是一個良好的編程習慣適當初始化變數,否則,有時程序會產生意想不到的結果。試試下面的例子中使用各類變數:
DECLARE
a integer := 10;
b integer := 20;
c integer;
f real;
BEGIN
c := a + b;
dbms_output.put_line('Value of c: ' || c);
f := 70.0/3.0;
dbms_output.put_line('Value of f: ' || f);
END;
/
當執行上面的程式碼,產生以下結果:
Value of c: 30
Value of f: 23.333333333333333333
PL/SQL procedure successfully
completed.
PL/SQL變數的作用
PL/SQL塊允許嵌套,即,每個程序塊可以包括另一內部塊。如果變數的內部塊內宣告,它不能存取外部區塊。但是,如果一個變數宣告並訪問外部區塊,也提供給所有嵌套內部區塊。有兩種類型的變數範圍:
·
局部變數 - 在內部區塊中宣告,並不能存取外塊中的變數。
·
全局變數 - 在最外層塊或包中宣告的變數。
下面的例子顯示在簡單的局部和全局變數的用法:
DECLARE
-- Global variables
num1 number := 95;
num2 number := 85;
BEGIN
dbms_output.put_line('Outer Variable num1: ' || num1);
dbms_output.put_line('Outer Variable num2: ' || num2);
DECLARE
-- Local variables
num1 number := 195;
num2 number := 185;
BEGIN
dbms_output.put_line('Inner Variable num1: ' || num1);
dbms_output.put_line('Inner Variable num2: ' || num2);
END;
END;
/
產生以下結果:
Outer Variable num1: 95
Outer Variable num2: 85
Inner Variable num1: 195
Inner Variable num2: 185
PL/SQL procedure successfully
completed.
指定SQL查詢結果為PL/SQL變數
可以使用SELECT INTO SQL語句來給PL/SQL變數賦值。在SELECT列表中的每個項目,必須有在INTO列表中相對應,類型兼容的變數。下面的例子說明了這個概念:現在創建一個表名為CUSTOMERS:
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
Table Created
接下來,就讓我們在table中新增一些值:
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad',
2000.00 );
INSERT INTO CUSTOMERS
(ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi',
1500.00 );
INSERT INTO CUSTOMERS
(ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00
);
INSERT INTO CUSTOMERS
(ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai',
6500.00 );
INSERT INTO CUSTOMERS
(ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal',
8500.00 );
INSERT INTO CUSTOMERS
(ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00
);
下面的程序是從上面的Table中,使用SQL的SELECT INTO子句給PL/SQL變數值:
DECLARE
c_id customers.id%type := 1;
c_name customers.name%type;
c_addr customers.address%type;
c_sal customers.salary%type;
BEGIN
SELECT name, address, salary INTO c_name, c_addr, c_sal
FROM customers
WHERE id = c_id;
dbms_output.put_line
('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal);
END;
/
產生以下結果:
Customer Ramesh from Ahmedabad earns
2000
PL/SQL procedure completed successfully
沒有留言:
張貼留言