假設我有一個PL/SQL存儲過程如下:如何確定PL/SQL參數值是否默認?
PROCEDURE do_something(foo VARCHAR2 DEFAULT NULL) IS
BEGIN
/* Do something */
END;
現在,假設do_something
調用兩種不同的方式:
/* 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 2009-05-19 12:41:02
彼得羅斯,希望我最近的編輯將有助於澄清我爲什麼這樣做。 – 2009-05-19 13:03:19
在我看來你真的是第二種「NULL」 - 例如「UNCONSTRAINED」或「未知」 - 您可以使用魔術值作爲默認值,但我的首選是明確創建包裝過程 - 如果有很多,可以編寫腳本來生成它們。 – 2009-05-20 02:44:34