I could not parse your sentence, sorry I don't know what you were trying to say.
This article was about NVL-or expansion. If you have a predicate:
where database_column = nvl(:bind_variable, database_column)
we will rewrite it as
where (database_column is not null and :bind_variable is null)
OR (:bind_variable is not null and database_column = :bind_variable)
you can see that in dbms_xplan output:
ops$tkyte%ORA11GR2> create table t as select * from all_objects;
Table created.
ops$tkyte%ORA11GR2> alter table t add constraint t_pk primary key(object_id);
Table altered.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> variable x number
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> set autotrace traceonly explain
ops$tkyte%ORA11GR2> select * from t where object_id = nvl(:x,object_id);
Execution Plan
----------------------------------------------------------
Plan hash value: 2163721932
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 78688 | 11M| 295 (1)| 00:00:04 |
| 1 | CONCATENATION | | | | | |
|* 2 | FILTER | | | | | |
|* 3 | TABLE ACCESS FULL | T | 78687 | 11M| 293 (1)| 00:00:04 |
|* 4 | FILTER | | | | | |
| 5 | TABLE ACCESS BY INDEX ROWID| T | 1 | 158 | 2 (0)| 00:00:01 |
|* 6 | INDEX UNIQUE SCAN | T_PK | 1 | | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(:X IS NULL)
3 - filter("OBJECT_ID" IS NOT NULL)
4 - filter(:X IS NOT NULL)
6 - access("OBJECT_ID"=:X)
Note
-----
- dynamic sampling used for this statement (level=2)
ops$tkyte%ORA11GR2> set autotrace off
ops$tkyte%ORA11GR2>
this allows us to have two plans in one - a full scan plan for when you don't supply a value for the bind variable and index access when you do.