[PL/SQL]10g PL/SQL學習筆記(二)
SELECT Statements in PL/SQL
必須使用INTO,只能選出一條記錄
Naming Conventions
避免變數名與列名相同,如相同,優先選擇列名。在where語句中會導致歧義。
DECLARE
hire_date employees.hire_date%TYPE;
sysdate hire_date%TYPE;
employee_id employees.employee_id%TYPE := 176;
BEGIN
SELECT hire_date, sysdate
INTO hire_date, sysdate
FROM employees
WHERE employee_id = employee_id;
END;
/
SQL Cursor
• A cursor is a pointer to the private memory area
allocated by the Oracle server.
• There are two types of cursors:
– Implicit: Created and managed internally by the
Oracle server to process SQL statements
– Explicit: Explicitly declared by the programmer
三種SQL Cursor Attributes
SQL%FOUND
SQL%NOTFOUND
SQL%ROWCOUNT
IF Statements
IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;
CASE Expressions
CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
WHEN expressionN THEN resultN
[ELSE resultN+1]
END;
/
TRUE AND NULL èNULL
TRUE OR NULL èTRUE
FALSE AND NULL èFALSE
FALSE OR NULL èNULL
NOT NULL èNULL
Basic Loops
LOOP
statement1;
. . .
EXIT [WHEN condition];
END LOOP;
WHILE Loops
WHILE condition LOOP
statement1;
statement2;
. . .
END LOOP;
FOR Loops(counter無需定義)
FOR counter IN [REVERSE]
lower_bound..upper_bound LOOP
statement1;
statement2;
. . .
END LOOP;
Guidelines for Loops
Basic loop:迴圈體中的語句至少需要被執行一次
While loop:必須將條件判斷放在每次迴圈之前
For loop:預先知道迭代次數
Nested Loops and Labels
迴圈可欠套使用,不同層的迴圈可使用labels來表示
<
END LOOP outer_loop;
Creating a PL/SQL Record
TYPE type_name IS RECORD
(field_declaration[, field_declaration]…);
identifier type_name;
field_declaration:
field_name {field_type | variable%TYPE
| table.column%TYPE | table%ROWTYPE}
[[NOT NULL] {:= | DEFAULT} expr]
%ROWTYPE Attribute(無須另外定義record type)
DECLARE
identifier reference%ROWTYPE;
Updating a Row in a Table by Using a Record
SET SERVEROUTPUT ON
SET VERIFY OFF
DEFINE employee_number = 124
DECLARE
emp_rec retired_emps%ROWTYPE;
BEGIN
SELECT * INTO emp_rec FROM retired_emps;
emp_rec.leavedate:=SYSDATE;
UPDATE retired_emps SET ROW = emp_rec WHERE
empno=&employee_number;
END;
/
SELECT * FROM retired_emps;
Creating an INDEX BY Table
TYPE type_name IS TABLE OF
{column_type | variable%TYPE
| table.column%TYPE} [NOT NULL]
| table%ROWTYPE
[INDEX BY PLS_INTEGER | BINARY_INTEGER
| VARCHAR2(
identifier type_name;
注意點:1.主鍵為interger型或string型(PLS_INTEGER or BINARY_INTEGER)
2.column為一個標量或一個record型
3.表的記錄數受主鍵的資料型別的範圍限制,可為負數
4.主鍵和column都不可以被命名
Using INDEX BY Table Methods
EXISTS
COUNT
FIRST and LAST
PRIOR
NEXT
DELETE
Nested Tables
TYPE type_name IS TABLE OF
{column_type | variable%TYPE
| table.column%TYPE} [NOT NULL]
| table.%ROWTYPE
說明:計數列為正數,從1開始引用。屬於資料庫的資料型別的一種
可使用constructor直接賦值
TYPE location_type IS TABLE OF locations.city%TYPE;
offices location_type;
offices := location_type('Bombay', 'Tokyo','Singapore','Oxford');
VARRAY
TYPE location_type IS VARRAY(3) OF locations.city%TYPE;
offices location_type;
說明:宣告時指定了最大值,可使用constructor直接賦值
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8558093/viewspace-1014379/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [PL/SQL]10g PL/SQL學習筆記(一)SQL筆記
- [PL/SQL]10g PL/SQL學習筆記(三)SQL筆記
- PL/SQL學習筆記-1SQL筆記
- PL/SQL學習筆記-2SQL筆記
- PL/SQL學習筆記-3SQL筆記
- PL/SQL學習筆記-4SQL筆記
- PL/SQL學習筆記-5SQL筆記
- PL/SQL學習筆記-6SQL筆記
- PL/SQL學習筆記-總結SQL筆記
- PL/SQL 學習日記SQL
- PL/SQL經典學習筆記(6-10)SQL筆記
- PL/SQL經典學習筆記(2-5)SQL筆記
- OCP 複習筆記之PL/SQL (3)筆記SQL
- OCP 複習筆記之PL/SQL (5)筆記SQL
- OCP 複習筆記之PL/SQL (1)筆記SQL
- OCP 複習筆記之PL/SQL (4)筆記SQL
- OCP 複習筆記之PL/SQL (2)筆記SQL
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- Oracle之PL/SQL基礎學習之二OracleSQL
- pl/sql練習SQL
- pl/sql 練習SQL
- oracle學習筆記(十五) PL/SQL語法結構以及使用Oracle筆記SQL
- pl/sql原始碼掃描sql(10g)SQL原始碼
- Oracle之PL/SQL基礎學習OracleSQL
- 【PL/SQL 學習】隱式遊標學習SQL
- PL/SQLSQL
- PL/SQL開發記錄SQL
- pl/sql記錄型別SQL型別
- pl/sql記錄表(一)SQL
- SQL&PL/SQL (轉)SQL
- PL/SQL 宣告SQL
- PL/SQL cursorSQL
- PL/SQL打包SQL
- PL/SQL DEVSQLdev
- pl/sql集合型別_varray(二)SQL型別
- PLSQL Language Reference-PL/SQL子程式-PL/SQL函式結果快取(二)SQL函式快取
- PL/Sql循序漸進全面學習教程--OracleSQLOracle
- 【PL/SQL 學習】PLS-00201SQL