PLS-00306: wrong number or types of arguments in call to ‘SSK2020U’
โดยคุณ Theerasak Maneeneim

** บทความนี้ตั้งใจเขียนขึ้นมาเพื่อขอบคุณ oracle.in.th ที่จัด course training ดีๆ มาให้เรียนครับ **

อันนี้เป็น Case Study ที่บริษัท ด้วยความที่ยังเป็นมือใหม่กับ Oracle Error นี้เลยเป็นความโง่ของผมเองที่ต้องใช้เวลาเกือบ 2 ชั่วโมงนั่งงงว่าเกิดอะไรขึ้น ก็เลยเก็บเอามาเล่าให้ฟังกันสักหน่อย จะได้มาช่วยกันเฮฮา สมน้ำหน้ากันเข้ามาบ้าง

เรื่องมีอยู่ว่าผมต้องเขียน PL/SQL Statement เพื่อเรียกใช้งาน Function SSK2020U ที่อยู่ใน Package SSK2020 โดยหน้าตาโครงสร้างของ Package ก็ประมาณนี้

oraclecase01

ใน Function ดังกล่าวมันมีการส่ง parameter ที่มีชนิดเป็น Array เข้าไปด้วย
ส่วน T_COMPANY_MASTER.FAC_CD%TYPE นั้นก็เป็น CHAR(10) ธรรมด๊า ธรรมดา

ผมรู้อยู่แล้วว่าไอ้ TYPE_PARA_JNLNO นี่มันคือ  TABLE OF CHAR(10) และ T_COMPANY_MASTER.FAC_CD%TYPE มันก็คือ CHAR(10)

ดังนั้น ผมก็ใส่ PL/SQL statement ของผมไปดังนี้

oraclecase02

ดูแล้วก็ไม่น่าจะผิดอะไร ปรากฎว่า มันดันตะโกน Error ด่ามาแบบนี้

Error report -
ORA-06550: line 8, column 13:
PLS-00306: wrong number or types of arguments in call to 'SSK2020U'
ORA-06550: line 8, column 5:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:

คืออ่าน Error แล้วก็มาดูว่า จำนวน Arguments ก็ไม่น่าจะผิด และ Type ก็ไม่น่าจะผิดนะ เพราะมันก็ชนิดเดียวกันนี่

ตัวแรกก็เป็น Table of CHAR(10) เหมือนกัน
ตัวทีสองก็เป็น NUMBER เหมือนกัน
ไอ้ FAC Code ก็เป็น CHAR(10) เหมือนกัน
ส่วนตัวสุดท้ายก็ NUMERIC เหมือนกัน

แล้วมันจะผิดได้เยี่ยงใด ????

นั่งเครียดอยู่พักนึง ก็นึกถึงคำพูดที่ตัวเองพูดประจำว่า “คอมพิวเตอร์มันไม่หลอกเราหรอก มีแต่เราหน่ะหลอกตัวเอง" ก็เลยมานั่งวิเคราะห์ดูอีกที

- ตัดประเด็นเรื่องจำนวน Arguments ออกไป เพราะมันเห็นชัดๆ ว่าเท่ากัน

ส่วนชนิดของมันก็มีประเด็นให้สงสัย

SSK2020U มันประกาศว่า Parameters 4 ตัวมันจะต้องเป็น

TYPE_PARA_JNLNO
NUMBER
T_COMPANY_MASTER.FAC_CD%TYPE
NUMBER

ดังนั้น ผมก็เลยลองเอาแบบนี้แป๊ะๆ เลย

oraclecase03
ปรากฎว่า ผ่านซะงั้น!!

นั่งอนาถตัวเองอยู่ 13 วิ

141107.20:56:32
• เพิ่ม.
/link/bthkhwaamcchaaksmaachik-pls-00306-wrong-number-or-types-of-arguments-in-call-to-ssk2020u