Giá trị mặc định chỉ được sử dụng nếu các đối số không được chỉ định. Trong trường hợp của bạn, bạn đã đã làm chỉ định các đối số - cả hai đều được cung cấp, với giá trị NULL. (Có, trong trường hợp này NULL được coi là một giá trị thực :-). Hãy thử:
EXEC TEST()
Chia sẻ và tận hưởng.
Phụ lục :Các giá trị mặc định cho các tham số thủ tục chắc chắn được chôn trong bảng hệ thống ở đâu đó (xem SYS.ALL_ARGUMENTS
xem), nhưng việc lấy giá trị mặc định ra khỏi chế độ xem liên quan đến việc trích xuất văn bản từ trường DÀI, và có thể sẽ chứng tỏ là khó khăn hơn giá trị của nó. Sự dễ dàng cách là thêm một số mã vào thủ tục:
CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',
Y IN NUMBER DEFAULT 1)
AS
varX VARCHAR2(32767) := NVL(X, 'P');
varY NUMBER := NVL(Y, 1);
BEGIN
DBMS_OUTPUT.PUT_LINE('X=' || varX || ' -- ' || 'Y=' || varY);
END TEST;