1Z0-147 Question #001
โดยคุณ Kitti Taweepanyayot

Examine this code:

CREATE OR REPLACE PRODECURE add_dept
(p_dept_name VARCHAR2 DEFAULT 'placeholder',
p_location VARCHAR2 DEFAULT 'Boston')
IS
BEGIN
INSERT INTO departments
VALUES (dept_id_seq.NEXTVAL, p_dept_name, p_location);
END add_dept;
/

Which three are valid calls to the add_dep procedure? (Choose three)

A. add_dept;
B. add_dept('Accounting');
C. add_dept(, 'New York');
D. add_dept(p_location=>'New York');

อธิบาย [spoil //ไฮไลท์เพื่อดูข้อความที่ซ่อนไว้]

คำตอบ คือ A,B,D

A ถูกต้อง เพราะว่า พารามิเตอร์ทั้งสองตัว ของ Procedure นี้ มีค่า default.
B ถูกต้อง เพราะว่า เราเรียก Procedure นี้ โดย ใช้วิธี position notation หรือ การเรียกแบบระบุค่า
และ พารามิเตอร์ตัวเแรก มีเท่ากับ 'Accounting' และ เนื่องจาก พารามิเตอร์ตัวที่สองนั้น มีค่า default (ค่าเริ่มต้น)
เราจึงสามารถที่จะไม่ต้องระบุ หรือ ข้ามไปได้ ดังนั้น ในกรณีนี้ พารามิเตอร์ตัวที่สอง จะใช้ค่า default เป็นค่าที่ใช้ในการ execute
D ถูกต้อง เพราะ เราเรียก Procedure นี้ โดย ใช้วิธี naming notation หรือ การเรียกแบบระบุชื่อตัวแปร 'New York' จะถูกส่งไปยัง พารามิเตอร์ p_location
ส่วน พารามิเตอร์ p_dept_name จะใช้ค่า default.
C ผิดเพราะ เราไม่สามารถใช้รวมถึงเดาว่า PL/SQL จะเข้าใจว่า ค่าdefaultจะถูกเรียกใช้สำหรับ พารามิเตอร์ตัวแรก นี่เป็นวิธีการที่ผิด สำหรับการเรียกใช้ Procedure.