Re: Não rodou - Re: [oracle_br] Re: Indice Baseado em Funcao no 9I funciona com RBO
Chiappa, acredita que ainda não rodou ? naum consigo o FBI em RBO no ORacle 8i... select * from v$version Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production PL/SQL Release 8.1.7.4.0 - Production CORE8.1.7.0.0Production TNS for Linux: Version 8.1.7.4.0 - Production NLSRTL Version 3.4.1.0.0 - Production timed_statistics TRUE Fiz um monte de alter session até mesmo sem saber o pq... para tentar ficar igual aos seus parametros... alter session set OPTIMIZER_MODE=rule ; alter session set query_rewrite_enabled=TRUE alter session set query_rewrite_integrity=TRUSTED alter session set text_enable=TRUE alter session set hash_join_enabled=true alter session set timed_statistics=true alter session set sql_trace=true alter session set oracle_trace_enable=true select name, value from v$parameter where isdefault='FALSE' ORDER BY NAME; 1background_dump_dest/u01/app/oracle/admin/dvbco1/bdump 2compatible8.1.7 3control_files/u01/oracle/oradata/dvbco1/control01.ctl, /u02/oracle/oradata/dvbco1/control02.ctl 4core_dump_dest/u01/app/oracle/admin/dvbco1/cdump 5db_block_buffers2048 6db_block_size4096 7db_namedvbco1 8event36 trace name errorstack level 3 9hash_join_enabledTRUE 10instance_namedvbco1 11java_pool_size2500 12large_pool_size8192000 13log_buffer163840 14log_checkpoint_interval1 15log_checkpoint_timeout1800 16max_enabled_roles80 17open_cursors500 18os_authent_prefix 19processes350 20remote_login_passwordfileEXCLUSIVE 21rollback_segmentsR04, R01, R02, R03 22service_namesdvbco1 23shared_pool_reserved_size5033164 24shared_pool_size50331648 25sort_area_retained_size65536 26sort_area_size65536 27user_dump_dest/u01/app/oracle/admin/dvbco1/udump --28utl_file_dir/home/ftpbis/* select name, value from v$parameter --where --isdefault='FALSE' ORDER BY NAME; 1O7_DICTIONARY_ACCESSIBILITYTRUE 2active_instance_count 3always_anti_joinNESTED_LOOPS 4always_semi_joinstandard 5aq_tm_processes0 6audit_file_dest?/rdbms/audit 7audit_trailNONE 8background_core_dumppartial 9background_dump_dest/u01/app/oracle/admin/dvbco1/bdump 10backup_tape_io_slavesFALSE 11bitmap_merge_area_size1048576 12blank_trimmingFALSE 13buffer_pool_keep 14buffer_pool_recycle 15commit_point_strength1 16compatible8.1.7 17control_file_record_keep_time7 18control_files/u01/oracle/oradata/dvbco1/control01.ctl, /u02/oracle/oradata/dvbco1/control02.ctl 19core_dump_dest/u01/app/oracle/admin/dvbco1/cdump 20cpu_count4 21create_bitmap_area_size8388608 22cursor_sharingEXACT 23cursor_space_for_timeFALSE 24db_block_buffers2048 25db_block_checkingFALSE 26db_block_checksumFALSE 27db_block_lru_latches2 28db_block_max_dirty_target2048 29db_block_size4096 30db_domain 31db_file_direct_io_count64 32db_file_multiblock_read_count8 33db_file_name_convert 34db_files200 35db_namedvbco1 36db_writer_processes1 37dblink_encrypt_loginFALSE 38dbwr_io_slaves0 39disk_asynch_ioTRUE 40distributed_transactions107 41dml_locks1716 42enqueue_resources1936 43event36 trace name errorstack level 3 44fast_start_io_target2048 45fast_start_parallel_rollbackLOW 46fixed_date 47gc_defer_time10 48gc_files_to_locks 49gc_releasable_locks0 50gc_rollback_locks0-1024=32!8REACH 51global_namesFALSE 52hash_area_size131072 53hash_join_enabledTRUE 54hash_multiblock_io_count0 55hi_shared_memory_address0 56hpux_sched_noage 57hs_autoregisterTRUE 58ifile 59instance_groups 60instance_namedvbco1 61instance_number0 62java_max_sessionspace_size0 63java_pool_size2500 64java_soft_sessionspace_limit0 65job_queue_interval60 66job_queue_processes0 67large_pool_size8192000 68license_max_sessions0 69license_max_users0 70license_sessions_warning0 71lm_locks12000 72lm_ress6000 73local_listener 74lock_name_space 75lock_sgaFALSE 76log_archive_dest 77log_archive_dest_1 78log_archive_dest_2 79log_archive_dest_3 80log_archive_dest_4 81log_archive_dest_5 82log_archive_dest_state_1enable 83log_archive_dest_state_2enable 84log_archive_dest_state_3enable 85log_archive_dest_state_4enable 86log_archive_dest_state_5enable 87log_archive_duplex_dest 88log_archive_format%t_%s.dbf 89log_archive_max_processes1 90
Re: Não rodou - Re: [oracle_br] Re: Indice Baseado em Funcao no 9I funciona com RBO
-- os params query_nn eu setei no init, e não via alter session é isso mesmo, dei alter system e rodou... Valeu. On 1/10/06, jlchiappa [EMAIL PROTECTED] wrote: Duas coisas eu vejo aí : a) return sysdate : isso não vai funcionar, pois A CADA HORA, cfrme o relógio do sistema avança, o sysdate retorna um valor diferente !! SE vc olhar direitinho no meu exemplo, eu peço uma CONSTANTE, que aí SIM é sempre a mesma , return 0; no meu caso b) os params query_nn eu setei no init, e não via alter session []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro [EMAIL PROTECTED] escreveu Chiappa, acredita que ainda não rodou ? naum consigo o FBI em RBO no ORacle 8i... select * from v$version Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production PL/SQL Release 8.1.7.4.0 - Production CORE8.1.7.0.0Production TNS for Linux: Version 8.1.7.4.0 - Production NLSRTL Version 3.4.1.0.0 - Production timed_statistics TRUE Fiz um monte de alter session até mesmo sem saber o pq... para tentar ficar igual aos seus parametros... alter session set OPTIMIZER_MODE=rule ; alter session set query_rewrite_enabled=TRUE alter session set query_rewrite_integrity=TRUSTED alter session set text_enable=TRUE alter session set hash_join_enabled=true alter session set timed_statistics=true alter session set sql_trace=true alter session set oracle_trace_enable=true select name, value from v$parameter where isdefault='FALSE' ORDER BY NAME; 1background_dump_dest/u01/app/oracle/admin/dvbco1/bdump 2compatible8.1.7 3control_files/u01/oracle/oradata/dvbco1/control01.ctl, /u02/oracle/oradata/dvbco1/control02.ctl 4core_dump_dest/u01/app/oracle/admin/dvbco1/cdump 5db_block_buffers2048 6db_block_size4096 7db_namedvbco1 8event36 trace name errorstack level 3 9hash_join_enabledTRUE 10instance_namedvbco1 11java_pool_size2500 12large_pool_size8192000 13log_buffer163840 14log_checkpoint_interval1 15log_checkpoint_timeout1800 16max_enabled_roles80 17open_cursors500 18os_authent_prefix 19processes350 20remote_login_passwordfileEXCLUSIVE 21rollback_segmentsR04, R01, R02, R03 22service_namesdvbco1 23shared_pool_reserved_size5033164 24shared_pool_size50331648 25sort_area_retained_size65536 26sort_area_size65536 27user_dump_dest/u01/app/oracle/admin/dvbco1/udump --28utl_file_dir/home/ftpbis/* select name, value from v$parameter --where --isdefault='FALSE' ORDER BY NAME; 1O7_DICTIONARY_ACCESSIBILITYTRUE 2active_instance_count 3always_anti_joinNESTED_LOOPS 4always_semi_joinstandard 5aq_tm_processes0 6audit_file_dest?/rdbms/audit 7audit_trailNONE 8background_core_dumppartial 9background_dump_dest/u01/app/oracle/admin/dvbco1/bdump 10backup_tape_io_slavesFALSE 11bitmap_merge_area_size1048576 12blank_trimmingFALSE 13buffer_pool_keep 14buffer_pool_recycle 15commit_point_strength1 16compatible8.1.7 17control_file_record_keep_time7 18control_files/u01/oracle/oradata/dvbco1/control01.ctl, /u02/oracle/oradata/dvbco1/control02.ctl 19core_dump_dest/u01/app/oracle/admin/dvbco1/cdump 20cpu_count4 21create_bitmap_area_size8388608 22cursor_sharingEXACT 23cursor_space_for_timeFALSE 24db_block_buffers2048 25db_block_checkingFALSE 26db_block_checksumFALSE 27db_block_lru_latches2 28db_block_max_dirty_target2048 29db_block_size4096 30db_domain 31db_file_direct_io_count64 32db_file_multiblock_read_count8 33db_file_name_convert 34db_files200 35db_namedvbco1 36db_writer_processes1 37dblink_encrypt_loginFALSE 38dbwr_io_slaves0 39disk_asynch_ioTRUE 40distributed_transactions107 41dml_locks1716 42enqueue_resources1936 43event36 trace name errorstack level 3 44fast_start_io_target2048 45fast_start_parallel_rollbackLOW 46fixed_date 47gc_defer_time10 48gc_files_to_locks 49gc_releasable_locks0 50gc_rollback_locks0-1024=32!8REACH 51global_namesFALSE 52hash_area_size131072 53hash_join_enabledTRUE 54hash_multiblock_io_count0 55hi_shared_memory_address0 56hpux_sched_noage 57hs_autoregisterTRUE 58ifile 59instance_groups 60instance_namedvbco1 61instance_number0 62java_max_sessionspace_size0
Re: Não rodou - Re: [oracle_br] Re: Indice Baseado em Funcao no 9I funciona com RBO
Obrigado Chiappa... vou realizar esse procedimento On 1/10/06, jlchiappa [EMAIL PROTECTED] wrote: OK, só lembro que no 8i (onde não há spfile) um parâmetro alterado via ALTER SYSTEM não fica registrado no initfile, então só estará ativo enquanto o banco estiver, quando vc der um shutdown ele vai sumir, se vc quer usar isso permanentemente é alterar o initfile, também. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro [EMAIL PROTECTED] escreveu -- os params query_nn eu setei no init, e não via alter session é isso mesmo, dei alter system e rodou... Valeu. On 1/10/06, jlchiappa [EMAIL PROTECTED] wrote: Duas coisas eu vejo aí : a) return sysdate : isso não vai funcionar, pois A CADA HORA, cfrme o relógio do sistema avança, o sysdate retorna um valor diferente !! SE vc olhar direitinho no meu exemplo, eu peço uma CONSTANTE, que aí SIM é sempre a mesma , return 0; no meu caso b) os params query_nn eu setei no init, e não via alter session []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro [EMAIL PROTECTED] escreveu Chiappa, acredita que ainda não rodou ? naum consigo o FBI em RBO no ORacle 8i... select * from v$version Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production PL/SQL Release 8.1.7.4.0 - Production CORE8.1.7.0.0Production TNS for Linux: Version 8.1.7.4.0 - Production NLSRTL Version 3.4.1.0.0 - Production timed_statistics TRUE Fiz um monte de alter session até mesmo sem saber o pq... para tentar ficar igual aos seus parametros... alter session set OPTIMIZER_MODE=rule ; alter session set query_rewrite_enabled=TRUE alter session set query_rewrite_integrity=TRUSTED alter session set text_enable=TRUE alter session set hash_join_enabled=true alter session set timed_statistics=true alter session set sql_trace=true alter session set oracle_trace_enable=true select name, value from v$parameter where isdefault='FALSE' ORDER BY NAME; 1background_dump_dest/u01/app/oracle/admin/dvbco1/bdump 2compatible8.1.7 3control_files/u01/oracle/oradata/dvbco1/control01.ctl, /u02/oracle/oradata/dvbco1/control02.ctl 4core_dump_dest/u01/app/oracle/admin/dvbco1/cdump 5db_block_buffers2048 6db_block_size4096 7db_namedvbco1 8event36 trace name errorstack level 3 9hash_join_enabledTRUE 10instance_namedvbco1 11java_pool_size2500 12large_pool_size8192000 13log_buffer163840 14log_checkpoint_interval1 15log_checkpoint_timeout1800 16max_enabled_roles80 17open_cursors500 18os_authent_prefix 19processes350 20remote_login_passwordfileEXCLUSIVE 21rollback_segmentsR04, R01, R02, R03 22service_namesdvbco1 23shared_pool_reserved_size5033164 24shared_pool_size50331648 25sort_area_retained_size65536 26sort_area_size65536 27user_dump_dest/u01/app/oracle/admin/dvbco1/udump --28utl_file_dir/home/ftpbis/* select name, value from v$parameter --where --isdefault='FALSE' ORDER BY NAME; 1O7_DICTIONARY_ACCESSIBILITYTRUE 2active_instance_count 3always_anti_joinNESTED_LOOPS 4always_semi_joinstandard 5aq_tm_processes0 6audit_file_dest?/rdbms/audit 7audit_trailNONE 8background_core_dumppartial 9background_dump_dest/u01/app/oracle/admin/dvbco1/bdump 10backup_tape_io_slavesFALSE 11bitmap_merge_area_size1048576 12blank_trimmingFALSE 13buffer_pool_keep 14buffer_pool_recycle 15commit_point_strength1 16compatible8.1.7 17control_file_record_keep_time7 18control_files/u01/oracle/oradata/dvbco1/control01.ctl, /u02/oracle/oradata/dvbco1/control02.ctl 19core_dump_dest/u01/app/oracle/admin/dvbco1/cdump 20cpu_count4 21create_bitmap_area_size8388608 22cursor_sharingEXACT 23cursor_space_for_timeFALSE 24db_block_buffers2048 25db_block_checkingFALSE 26db_block_checksumFALSE 27db_block_lru_latches2 28db_block_max_dirty_target2048 29db_block_size4096 30db_domain 31db_file_direct_io_count64 32db_file_multiblock_read_count8 33db_file_name_convert 34db_files200 35db_namedvbco1 36db_writer_processes1 37dblink_encrypt_loginFALSE 38dbwr_io_slaves0 39disk_asynch_io
Re: Não rodou - Re: [oracle_br] Re: Indice Baseado em Funcao no 9I funciona com RBO
Chiappa muito obrigado pelo conceito esclarecido... entretanto quero somente confirmar se eh isso que vc quis dizer... : a tabela tem milhoes de registros a minoria dos dados tem data_de_pagamento null. e eu quero executar a seguinte querie select ID from tabela X where data_de_pagamento IS null Pois eu quero trabalhar com os registro que nao foram pagos Essa querie acima nao usuaria indice mas mesmo assim naum seria vantagem eu criar um indice que usasse a funcao abaixo, para fazer com que no indice fiquem apenas as colunas nulas (a funcao retorna 0 para valores nullos e nulos para nao nulos ) ? create function func_test2 (a date) return number deterministic as begin -- if a is not null then -- return null; -- end if; -- return 0; -- end; / create index idx_test_f2 on tab_test(func_test2(data_de_pagamento)); On 1/7/06, jlchiappa [EMAIL PROTECTED] wrote: --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro [EMAIL PROTECTED] escreveu Valeu Chiappa, esse indices inventei na hora... sem sentido mesmo... soh para ver se a busca ia por eles... Muito Obrigado Mas só uma dúvida, vc disse q a melhor maneira de trabalhar com data é usar o between... ou seja, mesmo que eu sempre tenha um campo com data truncada para fazer comparacao, naum vale a pena criar o indice (eu digo de criar o indice. pq se eu der o trunc na data na hora da querie ele deixa de usar o indice) com a data truncada, mas sim usar o between ? eh isso mesmo ? Se a data está gravada truncada (ie, vc tem 100% de certeza que a porção hora não está nunca sendo gravada, portanto fica como 00:00:00), vc simplesmente faz : WHERE campodata = TO_DATE('01/12/2005', 'dd/mm/') ou, se for com SYSDATE a comparação, se faz : WHERE campodata = TRUNC(sysdate); que aí usa o índice normal, TRUNC na constante é ok, o que não se recomenda é TRUNC no campo... Já se vc não tem certeza absoluta, aí sim é escrever o SQL com between de 00:00:00 à 23:59:59, sim, é isso mesmo... Pro caso de não ter certeza se tá truncado ou não, a sugestão é : *** DEIXE ** de usar o TRUNC, pois aí , além de não precisar de índice especial algum, vc deixa de ter uma função sendo aplicada a CADA registro pesquisado... É aquele negócio, é um tiquinho extra de nada de CPU que o bd gasta pra chamar o TRUNC em cada registro se vc o tiver no campo da tabela, MAS de repente multiplicando esse tiquinho por 1 milhão de regs, pode ser algo que valha a pena... Além do que, quanto MENOS partes móveis , quanto menos coisas vc tiver pra se preocupar, melhor... outra coisa , se a situacao fosse : um sistema de pagamentos que tem um campo data_de_pagamento, que só é preenchida quando o documento foi pago... e vc quer saber todos os que naum foram pagos, ou seja, todos os que tem nulo na data vencimento.. se vc naum pudesse alterar a arquitetura da tabela... seria a melhor solucao criar um indice nessa coluna data_de_pagamento, um indice baseado numa funcao que, quando a coluna tiver valor, ou seja , foi efetuado o pagamento , retornasse null e, quando nao tiver sido efetuado, retornaria 1 guardando nos indices apenas os naum pagos... eh uma ideia ridicula ou poderia ser usada ? Vc não ganharia nada, veja : se eu criar um índice btree comum nesse campo, ** naturalmente ** os registros onde esse campo-chave é null já ** não ** entram nele. o índice selectivo que eu porpus serve pra quando, DENTRO do universo grande de chaves não-nulas, vc quer indexar só ** alguns ** registros : indexar TODAS as não-nulas apenas isso já acontece NATURALMENTE, é conceito de índices, se vc não tinha esse conceito passe a ter, exemplo : [EMAIL PROTECTED]:SQLcreate table tab_test(c1 varchar2(30), c2 number); Tabela criada. [EMAIL PROTECTED]:SQLinsert into tab_test (select null, object_id from all_objects); 22045 linhas criadas. == ok, vamos inserir alguns não-nulos : [EMAIL PROTECTED]:SQLinsert into tab_test values ('AAA', 1); 1 linha criada. [EMAIL PROTECTED]:SQLinsert into tab_test values ('BBB', 2); 1 linha criada. [EMAIL PROTECTED]:SQLselect count(*) from tab_test where c1 is not null; COUNT(*) -- 2 == tenho aqui o caso que vc propôs, ie : tenho uma porrada de valores-xchave null e só alguns poucos registros onde ele é not null. vamos criar os índices : [EMAIL PROTECTED]:SQLcreate index idx_test on tab_test(c1); Índice criado. [EMAIL PROTECTED]:SQLcreate function func_test (a char) return number 2 deterministic 3 as 4 begin 5 -- 6 if a is null then 7 -- 8 return null; 9 -- 10 end if; 11 -- 12 return 0; 13 -- 14 end; 15 / Função criada. [EMAIL PROTECTED]:SQLcreate index idx_test_f on tab_test(func_test(c1)); Índice criado. [EMAIL PROTECTED]:SQLanalyze table tab_test compute statistics for table for all indexes
Re: Não rodou - Re: [oracle_br] Re: Indice Baseado em Funcao no 9I funciona com RBO
Perfeito Chiappa, obrigado. On 1/7/06, jlchiappa [EMAIL PROTECTED] wrote: Exato, se realmente é uma minoria que tem null que te interessa, aí sim vale ** plenamente ** vc criar o índice na função que retorna 0 pra quem tá nulo : é o conceito, vc usa o índice seletivo quando vc tem um PEQUENO conjunto que vc quer destacar dentro dum universo maior... Única coisa, vc teria que escrever a sua consulta com ... WHERE func_test2(data_de_pagamento) = 0 pra aí sim ele achar os caras que estão nulos, é isso. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro [EMAIL PROTECTED] escreveu Chiappa muito obrigado pelo conceito esclarecido... entretanto quero somente confirmar se eh isso que vc quis dizer... : a tabela tem milhoes de registros a minoria dos dados tem data_de_pagamento null. e eu quero executar a seguinte querie select ID from tabela X where data_de_pagamento IS null Pois eu quero trabalhar com os registro que nao foram pagos Essa querie acima nao usuaria indice mas mesmo assim naum seria vantagem eu criar um indice que usasse a funcao abaixo, para fazer com que no indice fiquem apenas as colunas nulas (a funcao retorna 0 para valores nullos e nulos para nao nulos ) ? create function func_test2 (a date) return number deterministic as begin -- if a is not null then -- return null; -- end if; -- return 0; -- end; / create index idx_test_f2 on tab_test(func_test2(data_de_pagamento)); On 1/7/06, jlchiappa [EMAIL PROTECTED] wrote: --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro [EMAIL PROTECTED] escreveu Valeu Chiappa, esse indices inventei na hora... sem sentido mesmo... soh para ver se a busca ia por eles... Muito Obrigado Mas só uma dúvida, vc disse q a melhor maneira de trabalhar com data é usar o between... ou seja, mesmo que eu sempre tenha um campo com data truncada para fazer comparacao, naum vale a pena criar o indice (eu digo de criar o indice. pq se eu der o trunc na data na hora da querie ele deixa de usar o indice) com a data truncada, mas sim usar o between ? eh isso mesmo ? Se a data está gravada truncada (ie, vc tem 100% de certeza que a porção hora não está nunca sendo gravada, portanto fica como 00:00:00), vc simplesmente faz : WHERE campodata = TO_DATE('01/12/2005', 'dd/mm/') ou, se for com SYSDATE a comparação, se faz : WHERE campodata = TRUNC(sysdate); que aí usa o índice normal, TRUNC na constante é ok, o que não se recomenda é TRUNC no campo... Já se vc não tem certeza absoluta, aí sim é escrever o SQL com between de 00:00:00 à 23:59:59, sim, é isso mesmo... Pro caso de não ter certeza se tá truncado ou não, a sugestão é : *** DEIXE ** de usar o TRUNC, pois aí , além de não precisar de índice especial algum, vc deixa de ter uma função sendo aplicada a CADA registro pesquisado... É aquele negócio, é um tiquinho extra de nada de CPU que o bd gasta pra chamar o TRUNC em cada registro se vc o tiver no campo da tabela, MAS de repente multiplicando esse tiquinho por 1 milhão de regs, pode ser algo que valha a pena... Além do que, quanto MENOS partes móveis , quanto menos coisas vc tiver pra se preocupar, melhor... outra coisa , se a situacao fosse : um sistema de pagamentos que tem um campo data_de_pagamento, que só é preenchida quando o documento foi pago... e vc quer saber todos os que naum foram pagos, ou seja, todos os que tem nulo na data vencimento.. se vc naum pudesse alterar a arquitetura da tabela... seria a melhor solucao criar um indice nessa coluna data_de_pagamento, um indice baseado numa funcao que, quando a coluna tiver valor, ou seja , foi efetuado o pagamento , retornasse null e, quando nao tiver sido efetuado, retornaria 1 guardando nos indices apenas os naum pagos... eh uma ideia ridicula ou poderia ser usada ? Vc não ganharia nada, veja : se eu criar um índice btree comum nesse campo, ** naturalmente ** os registros onde esse campo-chave é null já ** não ** entram nele. o índice selectivo que eu porpus serve pra quando, DENTRO do universo grande de chaves não-nulas, vc quer indexar só ** alguns ** registros : indexar TODAS as não-nulas apenas isso já acontece NATURALMENTE, é conceito de índices, se vc não tinha esse conceito passe a ter, exemplo : [EMAIL PROTECTED]:SQLcreate table tab_test(c1 varchar2(30), c2 number); Tabela criada. [EMAIL PROTECTED]:SQLinsert into tab_test (select null, object_id from all_objects); 22045 linhas criadas. == ok, vamos inserir alguns não-nulos : [EMAIL PROTECTED]:SQLinsert into tab_test values ('AAA', 1); 1 linha criada. [EMAIL PROTECTED]:SQLinsert into tab_test values ('BBB', 2);
Re: Não rodou - Re: [oracle_br] Re: Indice Baseado em Funcao no 9I funciona com RBO ?
Rodei o Insert, tem agora 70894 registros... mas mesmo assim não foi On 1/6/06, Marcio Portes [EMAIL PROTECTED] wrote: Incrementa a tabela... acho que essas 4 linhas estão no mesmo bloco. tenta ai. insert into a1234 select sysdate from all_objects / commit; e tenta de novo. --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro [EMAIL PROTECTED] escreveu Chiappa, fui testar seu exemplo no 8i select * from v$version Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production PL/SQL Release 8.1.7.4.0 - Production CORE8.1.7.0.0Production TNS for Linux: Version 8.1.7.4.0 - Production NLSRTL Version 3.4.1.0.0 - Production alter session set OPTIMIZER_MODE=RULE; select NAME,VALUE from V$PARAMETER where upper(name) like '%QUERY%' query_rewrite_enabledFALSE query_rewrite_integrityenforced -- Criei uma tabela para teste create table a1234 (a date); -- Criei uma funcao para testes create or replace function t_trunc(a date) return date deterministic as begin -- if a is null then -- return null; -- end if; -- return trunc(a); -- end; -- Criei dois indices para teste, um usando uma funcao do sistema (a trunc) e outro usando uma funcao criado por mim create index ITESTANDO1 on a1234(trunc(a)) create index ITESTANDO2 on a1234(t_trunc(a)) -- Inseri alguns registros insert into a1234 values (trunc(sysdate)) insert into a1234 values (trunc(sysdate)) insert into a1234 values (null) insert into a1234 values (null) -- Rodei as querys select /*+ INDEX(a1234 ITESTANDO1) */ * from a1234 where trunc(a)=sysdate TABLE ACCESS FULL select /*+ INDEX(a1234 ITESTANDO2) */ * from a1234 where t_trunc(a)=trunc(sysdate) TABLE ACCESS FULL Sabe o por que ? On 1/5/06, Alex Fabiano Ribeiro [EMAIL PROTECTED] wrote: Muito legal o exemplo Chiappa! -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] nome de jlchiappa Enviada em: quinta-feira, 5 de janeiro de 2006 13:20 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] Re: Indice Baseado em Funcao no 9I funciona com RBO ? Segue um exemplinho, pra não ficar tão no ar : [EMAIL PROTECTED]:SQLshow parameters query NAME TYPEVALUE --- --- query_rewrite_enabledstring FALSE query_rewrite_integrity string enforced [EMAIL PROTECTED]:SQLalter session set OPTIMIZER_MODE=RULE; Sessão alterada. [EMAIL PROTECTED]:SQLselect empno, ename, comm, sal from emp; EMPNO ENAMECOMM SAL -- -- -- - - 7369 SMITH 800 7499 ALLEN 300 1600 7521 WARD 500 1250 7566 JONES 2975 7654 MARTIN 1400 1250 7698 BLAKE 2850 7782 CLARK 2450 7788 SCOTT 3000 7839 KING 5000 7844 TURNER 0 1500 7876 ADAMS 1100 7900 JAMES 950 7902 FORD 3000 7934 MILLER 1300 [EMAIL PROTECTED]:SQLcreate or replace function func_comm_not_nulo (P_COMM number) return number 2 deterministic 3 as 4 BEGIN 5 if P_COMM is null then 6return null; 7 end if; 8 return 0; 9 END; 10 / Função criada. [EMAIL PROTECTED]:SQL [EMAIL PROTECTED]:SQLcreate index IDX_COMM_NOT_NULO on EMP (func_comm_not_nulo(COMM)); Índice criado. [EMAIL PROTECTED]:SQLset autotrace on [EMAIL PROTECTED]:SQLselect * from emp where func_comm_not_nulo(COMM) =0; EMPNO ENAME JOB MGR HIREDATESAL COMM DEPTNO -- -- - -- --- - -- -- -- 7499 ALLEN SALESMAN7698 20/02/81 1600300 30 7521 WARD SALESMAN7698 22/02/81 1250500 30 7654 MARTIN SALESMAN7698 28/09/81 1250 1400 30 7844 TURNER SALESMAN7698 08/09/81 1500 0 30 Plano de Execução -- 0 SELECT STATEMENT Optimizer=CHOOSE 10 TABLE ACCESS (FULL) OF