次のように私は、PL/SQLストアド・プロシージャがあるとします。今PL/SQLパラメータの値がデフォルトに設定されているかどうかを確認する方法を教えてください。
PROCEDURE do_something(foo VARCHAR2 DEFAULT NULL) IS
BEGIN
/* Do something */
END;
、do_something
は、2つの異なる方法が呼び出されたとします
/* Scenario 1: The 'foo' parameter defaults to NULL */
do_something();
/* Scenario 2: The 'foo' parameter is explicitly set to NULL */
do_something(foo => NULL)
私はあるシナリオを決定するためにdo_something
手順を定義することができますどのようにそれを呼びますか?
編集:この手順のために私の意図を明確化:
以下FUNCTION find_customer(name VARCHAR2 DEFAULT NULL, number VARCHAR2 DEFAULT NULL) RETURN NUMBER IS
BEGIN
/* Query the "customer" table using only those parameters provided */
END;
は例が関連するSQL句で、この手順で使用している希望:
/* SELECT * FROM customer WHERE customer.name = 'Sam' */
find_customer(name => 'Sam')
/* SELECT * FROM customer WHERE customer.name = 'Sam' AND customer.number = '1588Z' */
find_customer(name => 'Sam', number => '1588Z')
/* SELECT * FROM customer WHERE customer.name = 'Sam' AND customer.number IS NULL */
find_customer(name => 'Sam', number => NULL)
/* SELECT * FROM customer WHERE customer.name IS NULL */
find_customer(name => NULL)
/* SELECT * FROM customer WHERE customer.name IS NULL AND customer.number IS NULL */
find_customer(name => NULL, number => NULL)
なぜシナリオを区別したいのですか?結局、fooは同じ価値を持つことになるのではないでしょうか? – Petros
ペトロス、私の最新の編集が、私がこれをやっている理由を明確にするのに役立ちます。 –
あなたが実際にしているのは、第2の種類の「NULL」です。 "UNCONSTRAINED"または "UNSPECIFIED" - あなたはデフォルトとして魔法の値を使うことができますが、私の好みは実際には明示的にラッパープロシージャーを作成することです - たくさんある場合、それらを生成するスクリプトを書くことができます。 –