運用PL/SQL,我們可以撰寫成procedure/function/package,便可以重複呼叫利用,或是放到DBMS_JOB中去例行執行。

  • procedure:沒有回傳值
  • function:要有回傳值
  • package:類似Java的com package概念,利用來打包一至多個procedure/function,更方便管理。

1)procedure

 

CREATE OR REPLACE PROCEDURE procedure_name AS

  v1 number(5);
  v2 varchar2(10);
  v3 date;
BEGIN
  --to do
END;

 

--procedure example

 

CREATE OR REPLACE PROCEDURE procedure_test AS

  v1 varchar2(50);
BEGIN

  v1 := 'This is a sample procedure';

  dbms_output.put_line(v1);

END;


--執行procedure example,須確認serverouptput開啟才能印出結果


SET serveroutput on;

EXEC procedure_test;


--顯示Output:


This is a sample procedure

PL/SQL procedure successfully completed


2)function


CREATE OR REPLACE FUNCTION function_name( parmeter1 in varchar2,...)

RETURN varchar2

AS

  v1 number(5);

  v2 varchar2(10);

  v3 date;

BEGIN

  --to do

END;


--function example


CREATE OR REPLACE FUNCTION function_test( v1 in varchar2)

RETURN varchar2

AS

  V2 varchar2(50);

BEGIN

  V2 := ' This is a sample function';

  RETURN V1 || V2;

END;

 

--執行function example


SELECT function_test('Hello!,pl/sql!') from dual;


--顯示Output:


Hello,pl/sql! This is a sample function

 

3)package

 

--Define Package
CREATE OR REPLACE PACKAGE package_name AS
  PROCEDURE procedure_name(v1 VARCHAR2) ;
  FUNCTION function_name(v2 VARCHAR2) RETURN VARCHAR2;
END;
/
--Package BodyCREATE OR REPLACE PACKAGE BODY package_name AS
  PROCEDURE proceduce_name(v1 VARCHAR2) IS
  BEGIN
 --to do   
  END ;
  
  FUNCTION function_name(v2 VARCHAR2) RETURN VARCHAR2 IS
    v3 VARCHAR2(20);
  BEGIN
   --to do
  END ;
END;
 
--package example
 
CREATE OR REPLACE PACKAGE package_test AS
  PROCEDURE procedure_test(v1 VARCHAR2);
  FUNCTION function_test(v2 VARCHAR2) RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY package_test AS
  PROCEDURE procedure_test(v1 VARCHAR2) IS
   BEGIN
    dbms_output.put_line(v1);
  END ;
  
  FUNCTION function_test(v2 VARCHAR2) RETURN VARCHAR2 IS
    v3 VARCHAR2(50);
  BEGIN
    v3 := ' This is a sample function';
    RETURN V2 || V3;
  END ;
END;
 
--執行package example -1
 

SET serveroutput on;

EXEC package_test.procedure_test('This is a sample procedure');

 
--顯示Output:
 
This is a sample procedure
 
PL/SQL procedure successfully completed
 
--執行package example -2
 

SET serveroutput on;

SELECT package_test.function_test('Hello,pl/sql!') from dual;

 

--顯示Output:

 

Hello,pl/sql! This is a sample function
 
3)查看撰寫好的procedure/function/package
 
可以利用user_source來查看,如下列所示:
 
--查看procedure
 
SELECT * FROM user_source where type like 'PROCEDURE';
 
--查看function
 
SELECT * FROM user_source where type like 'FUNCTION';
 
--查看package
 
SELECT * FROM user_source where type like 'PACKAGE%';
 
4)查看錯誤訊息
 
這邊提供一個好用的功能,當你在撰寫procedure/function/package的時候,如果發生無法正常運作,又找不到哪邊有問題的時候。
 
就可以利用show error或是SELECT * FROM user_errors;來查看。
文章標籤
全站熱搜
創作者介紹
創作者 auneths 的頭像
auneths

Next Innovation

auneths 發表在 痞客邦 留言(0) 人氣(3,928)