Okay, assume I have something as basic as this...

CREATE OR REPLACE PROCEDURE FOO
(
---p_Value1---IN---VARCHAR2---:=---NULL---,
---p_Value2---IN---VARCHAR2---:=---NULL
)
AS
BEGIN
---IF ( p_Value1 IS NULL ) THEN
------DBMS_OUTPUT.PUT_LINE ('Value1 IS NULL');
---END IF;
END;

Both of the following statements will tell me that 'Value1 IS NULL':

- FOO ( p_Value2=>'Hello');
- FOO ( NULL, 'Hello' );

**********************************************
My question is: Is there any way at all to distinguish, within the procedure, between the 2 calls?
**********************************************

Basically, I need to know whether a parameter was actually passed to the procedure or not. I know I can set the default value so that they don't *have to* pass the parameter. Done. But now, how do I distinguish between the default value that I set and the user actually filling the parameter with a value that happens to match the default value?

Thanks in advance,

- Chris