GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

12c – PL/SQL From SQL

 

Antes do 12c, era necessário criar uma PL/SQL function/procedure (schema object) para utilizar em conjunto com um comando SQL e para isso era necessário ter privilégios de CREATE PROCEDURE.

Segue um exemplo retirado de uma apresentação do Tom Kyte:

SQL> create table t (x varchar2(5));

Table created.

SQL> insert into t values ( 'a' );
insert into t values ( '1' );
insert into t values ( null );

commit;

Como era antes do 12c:

SQL>create or replace
   function is_number_old(x in varchar2)
   return varchar2
   is
       Plsql_Num_Error exception;
       pragma exception_init(Plsql_Num_Error, -06502);
   begin
       if (To_Number(x) is NOT null) then
         return 'Y';

      else
        return '';

      end if;

  exception
      when Plsql_Num_Error then
        return 'N';

  end;
/

Function created.

SQL> select rownum, x,         
           is_number_old(x) is_num
      from t;

ROWNUM  X     IS_NUM
---------- ----- --------------------
1  a N
2          1 Y
3

Trace após adicionar 110.000 registros na tabela, para comparar os tempos:

 

 

 

Como fica no 12c:

with
     function Is_Number
     (x in varchar2) return varchar2 is
       Plsql_Num_Error exception;
       pragma exception_init(Plsql_Num_Error, -06502);

     begin
       if (To_Number(x) is NOT null) then
         return 'Y';

       else
        return '';

    end if;

    exception
      when Plsql_Num_Error then
        return 'N';

    end Is_Number;

select rownum, x, is_number(x) is_num from t;

ROWNUM     X     IS_NUM
---------- ----- --------------------
1  a     N
2  1     Y
3

Podemos verificar uma diminuição significativa no tempo e cpu.

 

Abraço

 

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado.