PL/SQL

PLS-00231: 関数XXXXXXはSQLでは使用できません、の原因

ファンクションXXXXXXを宣言しているにもかかわらず、 PLS-00231: 関数XXXXXXはSQLでは使用できません。このエラーが発生。どうやらfunctionというのはprocedureと違って、パッケージ内プライベートとして作成することはできないみたい。なので、function XX…

PL/SQLでジェネリックなリストを使う

PL/SQLにはTable型というものがあり、これは簡単にいうと「ジェネリック型のリスト」ののような感じです。 declare type listClass is table of 社員%rowtype; list listClass; begin select * bulk collect into list from 社員; end;このように使えるみた…

SELECT INTO で0件だとエラーとなってしまうので

PL/SQLでSELECT INTO 文を使った場合、検索結果が0件だとエラーとなってしまうので、別な書き方を模索してみました。SELECT INTO の場合 declare num number; begin select id into num from .....; end;以下の書き方が一番スマートではないかと。 declare …

ストアドプロシージャでREF CURSORを渡すには

マニュアルを読まずにネット見ながらコーディングしてたら意外に苦戦。忘れないようにメモ。 type curtype is ref cursor; procedure foo(cu in curtype) is row table_name%rowtype; begin loop fetch cu into row; exit when cu%notfound; -- any process …

OracleのカーソルはSELECT文の理想的な形

久しぶりにPL/SQLでカーソルを使ってプログラミングすることがあって、思い出したり調べたりしながらやりました。で、思ったのだけど、PL/SQLのカーソルってこんなに便利だったっけ? DECLARE CURSOR cu IS SELECT...; BEGIN FOR row IN cu LOOP row.column_…