다음과 같이 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
페트 로스, 잘하면 내 최신 편집이 내가 왜 이러는지 명확히하는 데 도움이 될 것입니다. –
내게있어 당신이 정말로 후인 것은 두 번째 종류의 "NULL"입니다. "UNCONSTRAINED"또는 "UNSPECIFIED"- 당신은 디폴트 값으로 마법 값을 사용할 수 있지만, 실제로는 래퍼 프로 시저를 명시 적으로 생성하는 것이 좋을 것입니다. 많은 경우, 생성 할 스크립트를 작성할 수 있습니다. –