problem
i have sql scripts may use different tablespaces different database users.
in order remain flexible table creation i'd keep 1 script , apply various users. purpose have this:
tablespaces:
create tablespace my_tablespace datafile 'my_tablespace.dat' size 40m online; create tablespace my_indexspace datafile 'my_indexspace.dat' size 40m online;
and table creation script:
define default_tablespace = 'my_tablespace'; define default_indexspace = 'my_indexspace'; drop table test_table; create table test_table ( id number ) tablespace &default_tablespace; create index my_index on test_table( id) tablespace &default_indexspace;
i. e. can't set default tablespace user, because index uses different tablespace.
question
is possible override definition of default_tablespace
, default_indexspace
depending on e. g. environment variable?
something like:
define default_tablespace = isenviromentvariableset( 'other_tablespace') ? getenvironmentvariable( other_tablespace) : 'my_tablespace';
that way use different tablespaces whenever invoke script externally utility , @ same time keep default tablespace.
thank help!
in ddl operation (create, drop, etc.) u can't use variables.
easy way use pl/sql anonymous block this.
declare my_tabable_space varchar2(100) default 'my_some_tablespace'; other_tablespace varchar2(100); begin dbms_system.get_env('other_tablespace',other_tablespace); if other_tablespace not null my_tabable_space := other_tablespace ; end if; execute immediate 'create table test_table ( id number ) tablespace' || my_tabable_space; end; /
and select env variable u can use dbms_system.get_env ('name of variable', my_variable) package need dba right (i think.. :-) )
Comments
Post a Comment