LoginSignup
0
1

Oracleで引数を受け取りテーブルを返す関数

Last updated at Posted at 2024-02-23

やりたいこと

・Oracleの関数
・パラーメータを受け取り
・テーブルを返す

実現結果のイメージ

select * from high_price_books_title(1500);
ID TITLE PRICE
1 永遠のゼロ 1600
3 敗者のゲーム 2000

前提

select * from book;
ID TITLE AUTHOR PRICE
1 永遠のゼロ 百田尚樹 1600
2 風の歌を聴け 村上春樹 1200
3 敗者のゲーム チャールズ・エリス 2000

実装方法

TYPE(関数が出力するテーブルの型の定義が必須)

CREATE OR REPLACE TYPE t_book_title_record AS OBJECT (
    id NUMBER,
    title VARCHAR2(256),
    price NUMBER(10, 0)
);
/

CREATE OR REPLACE TYPE t_book_title_table IS TABLE OF t_book_title_record;
/

FUNCTION

CREATE OR REPLACE FUNCTION high_price_books_title(p_price NUMBER)
RETURN t_book_title_table IS
    v_ret t_book_title_table := t_book_title_table();
BEGIN
    SELECT 
        t_book_title_record(
             id
            ,title
            ,price
          )
    BULK COLLECT INTO v_ret
    FROM book
    WHERE price > p_price;

    RETURN v_ret;
END;
/
0
1
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
1