やりたいこと
・Oracleの関数
・パラーメータを受け取り
・テーブルを返す
実現結果のイメージ
select * from high_price_books_title(1500);
ID |
TITLE |
PRICE |
1 |
永遠のゼロ |
1600 |
3 |
敗者のゲーム |
2000 |
前提
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;
/