Enchanted – Taylor Swift – Kinetic Typography Lyrics

10/03/2014

งานสื่อการสอน Authorware

01/04/2014

Oracle Database กับ PL/SQL และเงื่อนไขเบื้องต้น

22/03/2014
empty image
empty image

PL/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;

ตัวอย่าง

วันนี้พอแค่นี้เน้อ มึน @[email protected] Zzz