Pular para o conteúdo principal

Virtual Columns on 11G

Using Virtual Columns on 11g:
  • Indexes defined against virtual columns are equivalent to function-based indexes.
  • Virtual columns can be referenced in the WHERE clause of updates and deletes, but they cannot be manipulated by DML.
  • Tables containing virtual columns can still be eligible for result caching.
  • Functions in expressions must be deterministic at the time of table creation, but can subsequently be recompiled and made non-deterministic without invalidating the virtual column. In such cases the following steps must be taken after the function is recompiled:
    • Constraint on the virtual column must be disabled and re-enabled.
    • Indexes on the virtual column must be rebuilt.
    • Materialized views that access the virtual column must be fully refreshed.
    • The result cache must be flushed if cached queries have accessed the virtual column.
    • Table statistics must be regathered.
  • Virtual columns are not supported for index-organized, external, object, cluster, or temporary tables.
  • The expression used in the virtual column definition has the following restrictions:
    • It cannot refer to another virtual column by name.
    • It can only refer to columns defined in the same table.
    • If it refers to a deterministic user-defined function, it cannot be used as a partitioning key column.
    • The output of the expression must be a scalar value. It cannot return an Oracle supplied datatype, a user-defined type, or LOB or LONG RAW.
SQL> create table cv_test
(year number(4),
month number(2));

begin
for i in 1..12
loop
insert into cv_test(year,month) values(2010,i);
end loop;
end;
/

commit;


SQL> select * from cv_test;
YEAR MONTH
----- -----
2010 1
2010 2
2010 3
2010 4
2010 5
2010 6
2010 7
2010 8
2010 9
2010 10
2010 11
2010 12
12 rows selected

-- Create Virual Column
ALTER TABLE cv_test ADD year_month GENERATED ALWAYS AS ((year||lpad(month,2,'0')));


SQL> select * from cv_test;
YEAR MONTH YEAR_MONTH
----- ----- ------------------------------------------------
2010 1 201001
2010 2 201002
2010 3 201003
2010 4 201004
2010 5 201005
2010 6 201006
2010 7 201007
2010 8 201008
2010 9 201009
2010 10 201010
2010 11 201011
2010 12 201012
12 rows selected


SQL> create index ix_year_month on cv_test (year_month);

explain plan for
Select * from cv_test
where(year||LPAD(month, 2, '0')) = '201001';
Explained
SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1997217315
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 78 | 2 (0
| 1 | TABLE ACCESS BY INDEX ROWID| CV_TEST | 1 | 78 | 2 (0
|* 2 | INDEX RANGE SCAN | IX_YEAR_MONTH | 1 | | 1 (0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access(TO_CHAR("YEAR")||LPAD(TO_CHAR("MONTH"),2,'0')='201001')
Note
-----
- dynamic sampling used for this statement
18 rows selected


SQL> explain plan for
select * from cv_test
where year_month = '201001';
Explained
SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1997217315
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 52 | 2 (0
| 1 | TABLE ACCESS BY INDEX ROWID| CV_TEST | 1 | 52 | 2 (0
|* 2 | INDEX RANGE SCAN | IX_YEAR_MONTH | 1 | | 1 (0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("YEAR_MONTH"='201001')
Note
-----
- dynamic sampling used for this statement
18 rows selected

Comentários

Postagens mais visitadas deste blog

Recompile JSP EBS - R12.2

1. Backup $ cd $EBS_APPS_DEPLOYMENT_DIR/oacore/html/WEB-INF/classes/ $ mv _pages _pages_old 2. Stop services cd $ADMIN_SCCRIPTS_HOME ./adapcctl.sh stop ./admanagedsrvctl.sh stop oafm_server1 ./admanagedsrvctl.sh stop oacore_server1 3. Compile the jsps manually  cd $FND_TOP/patch/115/bin/ perl $FND_TOP/patch/115/bin/ojspCompile.pl --compile --flush -p             4. Checking $ cd $EBS_APPS_DEPLOYMENT_DIR/oacore/html/WEB-INF/classes/_pages $ ls -ltr  5. Start services cd $ADMIN_SCCRIPTS_HOME ./admanagedsrvctl.sh start oacore_server1 ./admanagedsrvctl.sh start oafm_server1 ./adapcctl.sh start 6. Clear your web browser cache

How to Disable WebLogic Server Diagnostic Framework (WLDF)

[weblogic@yourhost ]$ cd $MW_HOME/oracle_common/common/bin/ [weblogic@yourhost bin]$ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands wls:/offline> connect('weblogic','password','t3://host_ip:port') Connecting to t3://xx.xx.xx.xx:7001 with userid weblogic ... Successfully connected to Admin Server "AdminServer" that belongs to domain "WeblogicDomain". Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. wls:/WeblogiDomain/serverConfig/> edit() Location changed to edit tree. This is a writable tree with DomainMBean as the root. To make changes you will need to start an edit session via startEdit(). For more help, use help('edit'). wls:/WeblogiDomain/edit/> startEdit() Starting an edit session ... Started edit session, be sure...

How to recreate oraInventory in ebs R12

Edit the oraInst.loc file: vi /etc/oraInst.loc Change the inventory_loc to a new location: inventory_loc=/prod/oraInventory_new Create the new directory: mkdir /prod/oraInventory_new Give permissions to the new directory: chmod -R 777 /prod/oraInventory_new -- Add the 10.1.3 Oracle Home to the new created oraInventory: cd $INST_TOP/ora/10.1.3 . ./APP .env Go to the $ORACLE_HOME: cd $ORACLE_HOME Edit the oraInst.loc and point it to the same location ad done in step 1: inventory_loc=/prod/oraInventory_new Add the 10.1.3 Oracle Home to the new oraInventory location: cd $ORACLE_HOME/appsutil/clone ./ouicli.pl Verify if the 10.1.3 is added to the new oraInventory directory: cd /prod/oraInventory_new/ContentsXML cat inventory.xml If it's not added, check the /prod/oraInventory_new/logs file. Verify the oraInventory has the information about the 10.1.3 Oracle Home: export PATH=$ORACLE_HOME/OPatch:$PATH opatch lsinventory -detail -- Add the 10.1.2 Oracle Home to the new created oraInvento...