วันพุธที่ 9 กันยายน พ.ศ. 2552

Basic PL/SQL

จนแล้วจนรอด programmer ก็ต้องเขียน SQL อันนี้ง่ายถูไถ ไปเรื่อยก็รอด
แต่พอมาเป็น Database ของ Oracle แล้วนี้
มันปวดใจจริง ๆ กับ PL/SQL ทำไมต้องมาเขียน program สองที่หว่า
แต่เอาเป็นว่า เอ่อ เขียนก็เขียนเพราะงานมันก็คนละแบบจริง ๆ ครับ

โครงสร้างภาษา PL/SQL

[ DECLARE << ประกาศตัวแปร ถ้าไม่มีไม่ต้องใส่ก็ได้

]
BEGIN << เริ่ม process
[ EXCEPTION << ประกาศการจัดการกับ Error ถ้าไม่มีไม่ต้องใส่ก็ได้

]
END; << จบ process ต้องมี ; ปิด้านเสมอ


การเขียน ซ้อนกันทำได้โดย

DECLARE << เริ่ม process หลัก
BEGIN
  DECLARE << เริ่ม process ย่อย
  BEGIN
  END << จบ process ย่อย
END << จบ process หลัก


comment code
1. บรรทัดเดียว ใช้

-- comment

2. หลายบรรทัด ใช้

/*
comment
comment
*/


รูปแบบการประกาศตัวแปร

variable_name [CONSTANT] datatype [NOT NULL][{DEFAULT|:=}initial_value];


variable_name << คือชื่อตัวแปร
CONSTANT << เป็น keyword ว่าตัวแปรนี้ เป็น constant variable (ค่าคงที่)
ไม่สามารถเปลี่ยนค่าได้
datatype << คือประเภทของตัวแปร เช่น
NUMBER[(p[,s])] number (p = precision, s = scale)
CHAR[(n)] fixed length character (default = 1 char)
VARCHAR2(n) variable length character n คือ maximum length
BOOLEAN logical มี 3 ค่า คือ (True, False, Null)

NOT NULL << เป็นการตั้งกฎไว้ว่า ตัวแปรนี้ต้องมีค่าเสมอ (ห้ามเป็น NULL)
{DEFAULT|:=}initial_value << เป็นการกำหนดค่าเริ่มต้นให้ตัวแปร

หมายเหตุ ถ้าระบุ NOT NULL หรือ CONSTANT keyword ในการประกาศตัวแปรแสดงว่า
ต้องมีการกำหนด Initial value ให้ตัวแปรนั้นด้วย

คำสั่งภาษา SQL ได้ดังนี้
Data Retrieval

SELECT

Data Manipulation Language

INSERT
UPDATE
DELETE

Transaction Control

COMMIT
ROLLBACK
SAVEPOINT


การ Assign ค่าตัวแปร

ชื่อตัวแปร := expression ;


การทำงานตามเงื่อนไขด้วย IF statement

IF condition THEN
statements ;
[ ELSIF condition THEN
statements;
]
[ ELSE
statements;
]
END IF;


การทำงานซ้ำ LOOP

LOOP
statement 1;
statement 2;
...
EXIT [ WHEN condition ];
END LOOP;


การทำงานซ้ำ FOR

FOR index IN [REVERSE]
lower_bound..upper_bound
LOOP
statement 1;
statement 2;
END LOOP;


[REVERSE] << ใช้สำหรับวน loop แบบย้อนหลัง (จาก upper_bound ลดลงทีละ 1 จนถึง lower_bound)
lower_bound..upper_bound << ตัวอย่างเช่น 1..10

การทำงานซ้ำ WHILE

WHILE condition
LOOP
statement 1;
statement 2;
END LOOP;


การนำ PL/SQL ไปใช้งาน

1. เขียนในรูปแบบของ Anonymous Block (pl/sql block)

[ DECLARE variable_declaration ; ]
BEGIN
executable - code ;
END;


2. ใช้พัฒนาเป็น SubProgram สำหรับเรียกใช้ได้มี 3 ลักษณะ
2.1 PROCEDURE
เป็นโปรแกรมย่อยที่ทำงานอะไรบางอย่าง โดยสามารถรับ parameter มาทำงานได้

PROCEDURE name [ ( parameter,….) ]
IS

pl/sql block;

2.2 FUNCTION
เป็นโปรแกรมย่อยที่นิยมใช้ เพื่อหาค่าอะไรบางอย่าง แล้วคืน กลับมาเป็นชื่อของตัว function เอง

FUNCTION name [ ( parameter,…) ]
RETURN datatype
IS

pl/sql block;

2.3 PACKAGE เป็นการรวบรวม PROCEDURE หรือ FUNCTION หลาย ๆ ตัว
ถ้าไว้ด้วยกัน เพื่อง่ายต่อการควบคุมในแง่ privilege และเป็นหมวดหมู่ดีขึ้น

วิธีการประกาศ parameters ใน Subprograms

parameter.name [IN | OUT | IN OUT] datatype [{ := | DEFAULT} expr];

parameter.name << ชื่อ parameter
mode
IN = รับค่าเข้า
OUT = ส่งค่ากลับ
IN OUT = รับค่าเข้าและส่งค่ากลับ

datatype ชนิดของข้อมูล ไม่ต้องระบุความยาว
[{ := | DEFAULT} expr] ใช้ initial ค่า
กรณีเป็น parameter ใน mode IN และเวลาเรียกไม่ระบุค่า parameter เข้ามา

ไม่มีความคิดเห็น: