Enchanted – Taylor Swift – Kinetic Typography Lyrics
10/03/2014งานสื่อการสอน Authorware
01/04/2014PL/SQL
เป็นภาษาชนิดหนึ่งนี่แหละ เป็นการดึงข้อมูลใน Database มาเก็บไว้ในตัวแปร แล้วแสดง มีอยู่ 2 แบบคือแบบ Anonymus Block และ แบบ Name Block
แบบ Anonymus Block
มีส่วนประกอบหลักคือ
Declaration Section -ส่วนกำหนดตัวแปร
Executable Section – ส่วนของการทำงาน
Exception Section – ส่วนจัดการข้อผิดพลาด
โครงสร้างจะเป็น
DECLARE
—Declaration Section
BEGIN
—Executable Section
EXCEPTION
—Exception Section
END;
ตัวอย่าง
SET SERVEROUTPUT ON
DECLARE
--ดึงข้อมูลจากฐานข้อมูลมาแสดง
M_FNAME VARCHAR2(50);
M_LNAME VARCHAR2(50);
BEGIN
--คำสั่ง SQL ดึงข้อมูล 1 record
select fname,lname into M_FNAME,M_LNAME from student where studentid=0;
DBMS_OUTPUT.PUT_LINE('First name is '|| M_FNAME);
DBMS_OUTPUT.PUT_LINE('Last name is '|| M_LNAME);
END;
การเขียนแบบ Name Block
โดยใช้ procedure มันก็เป็นการเขียน pl/sql แหละแต่เป็นการเขียนแบบ Name Block เหมือนการเขียนฟังก์ชั่นเลยแหละ ว่าจะให้ทำอะไร จะดึงอะไร จะแสดงอะไร จากนั้นเวลาเรียกใช้ก็แค่ P1(); แค่นี้จบ
วิธีการ
1.สร้่าง Procedure
2. เริ่มเขียนโค้ด
create or replace
PROCEDURE P1 AS
cursor cs is select studentid,fname,lname from student;
BEGIN
for V in cs loop
DBMS_OUTPUT.PUT_LINE(V.studentid||' : '||V.fname||' : '||V.lname);
end loop;
END P1;
3. ทำการ compile
4. ทดลองรันโดยกด [Ctrl+F10]
5. วิธีรันผ่าน worksheet
คำสั่งเช็คเงื่อนไขและคำสั่งควบคุมการทำซ้ำ
ก็เหมือนกับการเขียนโปรแกรมทั่วๆไปแหละนะ
ดูตัวอย่างกันเลย…
ก่อนอื่นขอเพิ่มตาราง employees ก่อนนะ
โค้ด
Create table employees
(
employee_id number (5,0),
fname varchar2(50) Not Null,
lname varchar2(50) Not Null,
salary number(7,0),
birthdate DATE,
constraint pk_employee_id primary key (employee_id)
);
จากนั้นสุ่มใส่ค่าเองเลยละกัน
โค้ด
DECLARE
i NUMBER := 0;
R_salary NUMBER;
BEGIN
LOOP
R_salary := DBMS_RANDOM.Value(2000, 10000);
insert into employees(employee_id,fname,lname,salary) values(i,'fname'||i,'lname'||i,R_salary);
i := i + 1;
EXIT WHEN i >= 20;
END LOOP;
END;
คำสั่งในการเช็คเงื่อนไข
1. คำสั่ง IF
รูปแบบ
IF condition THEN
statements;
END IF;
2. IF ELSE
รูปแบบที่ค้นเคยกันดี
IF condition THEN
Statements1;
ELSE
Statements2;
END IF;
ตัวอย่าง
3. IF ซ้อน IF หรือ Nested-IF
IF condition1 THEN
statements1;
ELSE condition2 THEN
statements2;
ELSEIF condition3 THEN
statements3
ELSE
statement4
END IF;
4. คำสั่ง LOOP
รูปแบบ
LOOP
statements;
EXIT WHEN conditions
END LOOP;
ซึ่งสามารถซ้อน loop ได้
ตัวอย่าง
DECLARE
X NUMBER :=0;
Y NUMBER :=0;
BEGIN
LOOP
X :=X+1;
DBMS_OUTPUT.PUT_LINE('ข้อ '||X);
Y:=0;
LOOP
Y:=Y+1;
DBMS_OUTPUT.PUT_LINE(' ข้อ 1.'||Y);
EXIT WHEN Y =4;
END LOOP;--end loop y
EXIT WHEN X =3;
END LOOP;--end loop x
END;
กำหนดชื่อให้ LOOP ก็ได้
<<LOOP Name>> LOOP
statements;
EXIT WHEN conditions
END LOOP;
สามารถออกจากการวนลูปกลางคันได้ด้วย EXIT “LOOP Name” WHEN conditions;
ตัวอย่าง
5. คำสั่ง WHILE LOOP
อืม.. เหมือนกับ LOOP แหละนะ แต่เอางื่อนไขมาไว้ตรง WHILE
WHILE condition LOOP
statements;
END LOOP;
สามารถใช้ EXIT WHEN เพื่อออกจาก LOOP ได้ ตัวอย่าง
6. FOR LOOP
วนทำอะไรซักอย่าง คงจะคุ้นเคยกันดี
FOR counter IN [REVERSE] LOWER_LIMIT..UPPER_LIMIT LOOP
statement;
END LOOP;
ตัวอย่าง พิมพ์สูตรคูณแม่ 10
โค้ด
DECLARE
i NUMBER :=0;
BEGIN
FOR i IN 1..12 LOOP
DBMS_OUTPUT.PUT_LINE('10*'||i||'='||i*10);
END LOOP;
END;
แล้วถ้าเพิ่ม REVERSE เข้าไปผลลัพธ์ก็จะเป็นแบบนี้ ค่า i จะเท่ากับ 12 ลแะลดลงทีละ 1 จนถึง 1
สามารถใช้ EXIT WHEN เพื่อออกจาก LOOP ได้ ตัวอย่าง
โค้ด
DECLARE
i NUMBER :=0;
BEGIN
FOR i IN 1..12 LOOP
DBMS_OUTPUT.PUT_LINE('10*'||i||'='||i*10);
EXIT WHEN i>5;
END LOOP;
END;
7. คำสั่ง CASE
แบบแรก เปรียบเทียบค่าของตัวแปร
CASE Variable
WHEN value1 THEN statements1;
WHEN value2 THEN statements2;
WHEN value 3 THEN statements3;
ELSE statementsN;
END CASE;
ตัวอย่าง
โค้ด
DECLARE
X NUMBER :=5;
StName varchar2(10);
BEGIN
SELECT fname INTO StName FROM student WHERE studentid=0;
CASE Stname
WHEN 'sleepy' THEN
DBMS_OUTPUT.PUT_LINE('Name is sleepy');
WHEN 'awake' THEN
DBMS_OUTPUT.PUT_LINE('Name is awake');
ELSE
DBMS_OUTPUT.PUT_LINE('Name is something');
END CASE;
END;
ยังมี CASE อีกแบบนึงเป็น CASE แบบเช็คเงื่อนไข
CASE
WHEN condition1 THEN statements1;
WHEN condition2 THEN statements2;
WHEN condition3 THEN statements3;
ELSE statementsN;
END CASE;
ตัวอย่าง
วันนี้พอแค่นี้เน้อ มึน @.@ Zzz