It is a very common challenge for a dba to create scripts that work on every version.
How do you return NULL if a column does not exists?
Imagine I have a view that returns the table_name, column_name and retention_type of my LOBS.
SQL> create table t1(c clob) lob(c) store as (retention);
Table created.
SQL> create table t2(c clob) lob(c) store as (pctversion 10);
Table created.
SQL> create or replace force view v as select table_name,
column_name,retention_type from user_lobs;
View created.
SQL> select * from v where table_name in ('T1','T2');
TAB COL RETENTION_TYPE
--- --- --------------
T1 C YES
T2 C NO
Let’s imagine I try to run this on an antique version of Oracle
SQL> select version from v$instance;
VERSION
-----------------
11.2.0.1.0
SQL> create table t1(c clob) lob(c) store as (retention);
Table created.
SQL> create table t2(c clob) lob(c) store as (pctversion 10);
Table created.
SQL> create or replace force view v as select table_name,column_name,retention_type from user_lobs;
Warning: View created with compilation errors.
SQL> select * from v where table_name in ('T1','T2');
select * from v where table_name in ('T1','T2')
*
ERROR at line 1:
ORA-04063: view "SCOTT.V" has errors
Obviously the RETENTION_TYPE did not exist in that version.
Let’s default this to NULL !
SQL> create or replace function retention_type return varchar2 is
begin return null; end;
/
Function created.
SQL> select * from v where table_name in ('T1','T2');
TAB COL RETENTION_TYPE
--- --- --------------
T1 C
T2 C
Very simple workaround, is not it?