0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【OracleDB】パッケージの作成~ストアドとファンクションの定義

Posted at

パッケージの作成方法

従業員マスタを対象にデータを取得するストアドとファンクションを作成しました。

仕様部

create or replace NONEDITIONABLE PACKAGE pkg_emp AS

  --ファンクション
  FUNCTION get_emp_no(NAME IN VARCHAR2) RETURN VARCHAR2;
  --プロシージャ
  PROCEDURE get_emp_name(NO IN VARCHAR2, NAME OUT VARCHAR2);

END;

本体部

create or replace NONEDITIONABLE PACKAGE BODY pkg_emp AS


  FUNCTION get_emp_no(NAME IN VARCHAR2) RETURN VARCHAR2
  -- 宣言部
  IS
    wk_no VARCHAR2(50);
  -- 処理部
  BEGIN
    SELECT
    EMPNO INTO wk_no
    FROM EMP
    WHERE EMPNAME = NAME;
    
    RETURN wk_no;

  END get_emp_no;
  
  FUNCTION get_emp_gender(NAME IN VARCHAR2) RETURN NUMBER
  -- 宣言部
  IS
    wk_gender NUMBER;
  -- 処理部
  BEGIN
    SELECT
    GENDER_F INTO wk_gender
    FROM EMP
    WHERE EMPNAME = NAME;
    
    RETURN wk_gender;

  END get_emp_gender;

  PROCEDURE get_emp_name(NO IN VARCHAR2, NAME OUT VARCHAR2)
  -- 宣言部
  IS
    wk_name VARCHAR2(50);
    wk_no VARCHAR2(50);
    wk_gender NUMBER;
  -- 処理部
  BEGIN
    SELECT
    EMPNAME INTO wk_name
    FROM EMP
    WHERE EMPNO = NO;
    
    wk_no := get_emp_no(wk_name);
    wk_gender := get_emp_gender(wk_name);
    NAME := wk_name;
    DBMS_OUTPUT.PUT_LINE(wk_gender);
    DBMS_OUTPUT.PUT_LINE(wk_no);
    DBMS_OUTPUT.PUT_LINE(NAME);

  END get_emp_name;
END pkg_emp;

補足

以下の点に気を付けないとエラーに悩みます。
・仕様部で定義したストアドとファンクションの引数が本体部とも一致していること
・引数と同じ変数名を定義していないこと
・selectしてきた値と代入先の変数の型が一致していること

※仕様部と本体部のパッケージ作成は分けて実行したほうが良いです。
 定義が重複しているエラーなのか、処理の記載ミスなのかの判断が遅くなります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?