Oracle PL/SQL Tips : How to show Oracle procedure usages

Oracle PL/SQL Tips : How to show Oracle procedure usages

สวัสดีครับ ห่างหายกันไปนานวันนี้กลับมาอีกครั้ง พร้อมของฝากติดมือมาพิมพ์เลยครับ ของฝากวันนี้คงจะเหมาะสำหรับคน
ที่ใช้ PL/SQL เป็นนิจครับ โดยปกติเวลาพัฒนา Procedure หรือ Function มักจะต้องมีการรับ/ส่งค่าด้วยเสมอๆ
และเคยหรือไม่ว่า เวลาเราไปเรียกใช้ Procedure/Function ที่เราไม่ได้พัฒนา เราจะรู้ได้ยังไงว่า Procedure เหล่านั้น
เรียกใช้งานอย่างไร ต้องมี Arguments ส่งเข้าไปหรือไม่ หรือต้องรับค่าจาก Procedure ด้วย Datatype อะไร

สำหรับคนที่มีประสบการณ์มาก่อนจะมีวิธีการตรวจสอบการเรียกใช้ Procuder/Function ด้วยการเรียกดูจาก
object ชื่อ “ALL_SOURCE” หรือ “USER_SOURCE” ดังตัวอย่าง สมมติว่าต้องการดูว่า Procedure “SHOW_TEXT” ต้องรับ parameters อะไรบ้าง

 select * from all_sourcewhere owner=’TONY’ and name=’SHOW_TEXT’; 

เราจะได้ผลลัพธ์ดังนี้

OWNER NAME TYPE LINE TEXT
TONY SHOW_TEXT PROCEDURE 1 procedure show_text (v_in varchar2) as
TONY SHOW_TEXT PROCEDURE 2 begin
TONY SHOW_TEXT PROCEDURE 3 dbms_output.put_line(‘ your input is ‘||v_in);
TONY SHOW_TEXT PROCEDURE 4 end show_text ;



จากผลลัพธ์เราจะเห็นตั้งแต่ชื่อ Procedure จนถึง Code Program โดย Argument ที่ต้องส่งเข้าไปเป็นแบบ IN ประเภท Varchar2 และมีเพียงค่าเดียว

ในกรณีที่มีการสร้างเป็น Package เราสารางเรียกดูได้จาก object “ALL_SOURCE” เช่นกัน แต่ว่ามีวิธีที่ง่ายกว่านั่นคือ เรียกใช้คำสั่ง “DESC <Package_name>” เราจะเห็นว่าภายใน Package มี Procedure/Function อะไรบ้าง รับตัวแปรแบบไหน แต่เราจะไม่เห็น Code Program ดังตัวอย่าง เรียกดูรายละเอียดใน “TEST_PACKAGE” Package

SQL> DESC TEST_PACKAGE  

PROCEDURE   SHOW_INPUT 

Argument Name                  Type            In/Out Default? 

—————————— ———————– ———– ——– 

V_IN                                 VARCHAR2          IN



จะเห็นว่าภายใน Package มี Procedure “SHOW_INPUT” ที่รับ Argument เดียวคือ V_IN ประเภท VARCHAR2

แต่…ถ้าผู้พัฒนามีการเข้ารหัสโค้ดโปรแกรมไว้ล่ะ (โดยเรียกใช้เครื่องมือชื่อ WRAP ช่วยก็สามารถปิดบังโค้ดได้) ถ้าเป็นกรณีนี้เราจะไม่สามารถเข้าไปดูรายละเอียดได้เลย

ซึ่งมีอีกวิธีการที่จะทำให้สะดวกต่อผู้ใช้บริการ และไม่ทำให้ Procedure Error หากใส่ Argument ไม่ครบ วิธีการที่ว่านี้คือ เราจะใช้ Technique “Overloading” นั่นเอง

การ Overloading คือการสร้าง Procedure ชื่อเดียวกันแต่กำหนด Arguments ที่มีจำนวนแตกต่างกัน เช่น เราสร้าง Procedure SHOW_INPUT ที่รับข้อมูล 1 Argument, 2 Arguments หรือไม่รับ Arguments เลย โดยทั้ง 3 Procedures มีการสร้างโค้ดที่แตกต่างกันด้วย

เมื่อผู้ใช้บริการเรียกใช้ Procedure ชื่อ SHOW_INPUT โดยใส่ Argument เข้ามา 2 ค่า Oracle ก็จะไปเรียก Procedure ที่มี 2 Arguments ไปทำงาน แต่ถ้าไม่ใส่เลยก็จะไปเรียก Procedure ที่ไม่มีการกำหนด Arguments ไว้มาทำงาน ด้วยคุณสมบติแบบนี้เราจึงสามารถประยุกต์ใช้ในการสร้าง Procedure ให้แสดง Usages : ได้ครับ ดังตัวอย่าง

1. การใช้ Technique Overloading จะต้องสร้าง Procedure ภายใน Package โดยมีตัวอย่าง Package “TEST_PACKAGE” ดังนี้

 create or replace package test_package is              
procedure show_input ( v_in varchar2) ;
            

procedure show_input ; 

 end test_package;

/

 

create or replace package body test_package is

 

            procedure show_input ( v_in varchar2) is

            begin

                        dbms_output.put_line(‘ your input is ‘||v_in);

            end show_input ;

 
            procedure show_input is

            begin

                        dbms_output.put_line(‘Syntax            : show_input(v_in varchar2)’);

                        dbms_output.put_line(‘Example         : execute show_input(”your input message”);’);

            end show_input;

end test_package;

/

 



จากตัวอย่างได้ทำการสร้าง Procedure  “SHOW_INPUT” ซึ่งมีทั้งแบบรับ 1 Argument เพื่อมาแสดงผล และแบบไม่รับ Argument เลย เพื่อมาใช้ในการแสดง Usage ได้

2. ตัวอย่างการเรียกใช้ procedure show_input

SQL> exec test_package.show_input ;

Syntax  : show_input(v_in varchar2)

Example : execute show_input(‘your input message’); 

PL/SQL procedure successfully completed.



จากตัวอย่างถ้าเราไม่ระบุ Argument เข้าไป Oracle จะทำการเรียกใช้ Procedure SHOW_INPUT ที่ไม่มีการรับ Argument แทน ซึ่งผลลัพธ์ก็จะแสดง Syntax/ Usages

ดังนั้นเราจะรู้จักการรูปแบบการเรียกใช้ Procedure ที่เราสนใจได้แล้วครับ

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *