ストアドプロシージャの実行(位置表記法と名前表記法)
PL/SQL のプログラム からの プロシージャ、ファンクション、パッケージ などのサブプログラムの呼び出しには位置表記法、名前表記法、
および、両方を併用したパラメータの表記をすることができる。
位置表記法 (Positional Notation)
多くの開発言語で位置表記法が利用されている。
ほとんどの ファンクションやプロシージャの呼び出し では位置表記法が適していると思われる。
※ Oracle 10g までは SQL の呼び出しは位置表記法のみに限定されていたが Oracle 11g からは SQL の呼び出しにも位置表記法および両方を併用した混合表記も可能。
位置表記法による記述例
PRODUCT(P_NUM1 IN NUMBER,P_NUM2 IN NUMBER) を呼び出す例
x := PRODUCT(1,2)
名前表記法 (Named Notation)
一般的に名前表記法は位置表記法に比べてソースコードが長くなるが、いくつかのケースでメリットがある。
- パラメータに関数名から推測しにくい リテラル を指定している場合(ソースコードを判読しやすい)
- 多くのオプションパラメータがある場合
名前表記法による記述例
PRODUCT(P_NUM1 IN NUMBER,P_NUM2 IN NUMBER) を呼び出す例
x := PRODUCT( P_NUM1=>1, P_NUM2=>2)
または
x := PRODUCT( P_NUM2=>2, P_NUM1=>1)
ファンクションの本体でどちらの呼び出し方法を使用する。といった指定は必要ない。
ほとんどのパッケージにおいて位置表記法が使用できる、しかし一部には名前表記法しか受け付けないプロシージャ、ファンクションもある。
今のところ知っているのは下のパッケージだけであるが、他にもいくつかあるのではないかと思う。
(※) RAW の定義は 「subtype RAW is VARCHAR2;」と VARCHAR2 のサブタイプであるために起こる。
結合演算子 =>
オラクルの結合演算子(=>)は、結合演算子の左右に指定した2つのオペランドから「引数」を生成する演算子である。
⇒ 比較演算子(単純比較条件、グループ比較条件)
結合演算子の左に「パラメータの名称」、右に「パラメータの値」を指定する。
結合演算子という名前は Association Operator の日本語訳である。
仮パラメータと実パラメータを関連付ける (Association) 演算子 (operator) で結合演算子であり、JOIN という意味は含まれていない。
個人的には「関連付け演算子」の方が体をあらわしているのではないかと思われる。 (連想配列(Associative Array)=結合配列 と同じ訳し方をしている都合があるのだろう)
混合表記法(Mixed Notation:位置表記法と名前表記法の併用)
最初は位置表記で記述していき、途中から名前表記法にするようなことも可能である。Mixed Notation
これは、先頭の幾つかのパラメータが必須で後方に多数の任意指定のパラメータがあるときに利用すると便利だろう。
x := function_y(1, 2, 3, opt1=> 18, opt3=> 13)
但し、この例のように位置表記法にマジックナンバーを埋め込んだり、名前表記法でも optXX などの
抽象的な仮パラメータの名前をつけると双方の表記法によるメリットは減少し、ソースコードを読みやすくする事にも貢献しない。