แต่พอมาเป็น 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 << ชื่อ parametermode IN = รับค่าเข้า
OUT = ส่งค่ากลับ
IN OUT = รับค่าเข้าและส่งค่ากลับ
datatype ชนิดของข้อมูล ไม่ต้องระบุความยาว[{ := | DEFAULT} expr] ใช้ initial ค่า กรณีเป็น parameter ใน mode IN และเวลาเรียกไม่ระบุค่า parameter เข้ามา
ไม่มีความคิดเห็น:
แสดงความคิดเห็น