Path: text.usenetserver.com!out04b.usenetserver.com!news.usenetserver.com!in02.usenetserver.com!news.usenetserver.com!postnews.google.com!m73g2000hsh.googlegroups.com!not-for-mail
From: "Vladimir M. Zakharychev" <vladimir.zakharychev@gmail.com>
Newsgroups: comp.databases.oracle.server
Subject: Re: Optimizing Query (Faster insert)
Date: Thu, 7 Aug 2008 02:37:13 -0700 (PDT)
Organization: http://groups.google.com
Lines: 277
Message-ID: <5557304c-1046-4d42-99e1-18112c0d8ef0@m73g2000hsh.googlegroups.com>
References: <09328cfb-c994-4b0a-ad92-391efa65081c@25g2000hsx.googlegroups.com>
NNTP-Posting-Host: 91.196.34.22
Mime-Version: 1.0
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
X-Trace: posting.google.com 1218101834 31575 127.0.0.1 (7 Aug 2008 09:37:14 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Thu, 7 Aug 2008 09:37:14 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: m73g2000hsh.googlegroups.com; posting-host=91.196.34.22; 
 posting-account=PAnILQoAAAD84SMI2vqfU32t6U_KSuGX
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.1) 
 Gecko/2008070208 Firefox/3.0.1,gzip(gfe),gzip(gfe)
Xref: usenetserver.com comp.databases.oracle.server:447039
X-Received-Date: Thu, 07 Aug 2008 05:37:14 EDT (text.usenetserver.com)

On Aug 6, 7:06=A0pm, EliasFigueroa <Eliasf...@gmail.com> wrote:
> Tengo Problemas para insertar datos...
>
> 1.-CREATE OR REPLACE PROCEDURE SPGT147_CARGA_REGTMPRESUMEN
> =A0 =A0( p_fecha IN VARCHAR2)
> =A0 =A0 -- param2 IN OUT datatype)
> =A0 =A0IS
>
> =A0 --VARIABLES PARA EL CURSOR
> TYPE codigoregistroactivity =A0 =A0 IS TABLE OF
> Reg_tmptrafico.Codigoregistroactivity%type;
> TYPE periodo =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafic=
o.Periodo
> %type;
> TYPE aparty =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 IS TABLE OF Reg_tmptrafic=
o.Aparty%type;
> TYPE bparty =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 IS TABLE OF Reg_tmptrafic=
o.Bparty%type;
> TYPE tipotelefonoorigen =A0 =A0 =A0 IS TABLE OF
> Reg_tmptrafico.Tipotelefonoorigen%type;
> TYPE tipotelefonodestino =A0 =A0 =A0IS TABLE OF
> Reg_tmptrafico.Tipotelefonodestino%type;
> TYPE callclass =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.=
Callclass
> %type;
> TYPE startdatetime =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.Star=
tdatetime
> %type;
> TYPE rao =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptr=
afico.Rao%type;
> TYPE tipollamada =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.Ti=
pollamada
> %type;
> TYPE duration =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 IS TABLE OF Reg_tmptrafico.=
Duration
> %type;
> TYPE callcharge =A0 =A0 =A0 =A0 =A0 =A0 =A0 IS TABLE OF Reg_tmptrafico.Ca=
llcharge
> %type;
> TYPE refid =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptraf=
ico.Refid%type;
> TYPE cod_tipopc =A0 =A0 =A0 =A0 =A0 =A0 =A0 IS TABLE OF Reg_tmptrafico.Co=
d_Tipopc
> %type;
> TYPE cod_stip_pc =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.Co=
d_Stip_Pc
> %type;
> TYPE cod_nat_cta =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.Co=
d_Nat_Cta
> %type;
> TYPE cod_seg_cta =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.Co=
d_Seg_Cta
> %type;
> TYPE codigodepartamento =A0 =A0 =A0 IS TABLE OF
> Reg_tmptrafico.Codigodepartamento%type;
> TYPE numeroinscripcion =A0 =A0 =A0 =A0IS TABLE OF
> Reg_tmptrafico.Numeroinscripcion%type;
> TYPE codigozonal =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.Co=
digozonal
> %type;
> TYPE expiredate =A0 =A0 =A0 =A0 =A0 =A0 =A0 IS TABLE OF Reg_tmptrafico.ex=
piredate
> %type;
> TYPE tipotelefono =A0 =A0 =A0 =A0 =A0 =A0 IS TABLE OF Reg_tmptrafico.Tipo=
telefono
> %type;
> TYPE valorfacial =A0 =A0 =A0 =A0 =A0 =A0 =A0IS TABLE OF Reg_tmptrafico.Va=
lorfacial
> %type;
> /*---------------------------------------------------------------*/
> v_codigo codigoregistroactivity;
> v_periodo periodo;
> v_aparty aparty;
> v_bparty bparty;
> v_tipotelefoori tipotelefonoorigen;
> v_tipotelefodes tipotelefonodestino;
> v_callclas callclass;
> v_startdate startdatetime;
> v_rao rao;
> v_tipollamada tipollamada;
> v_duration duration;
> v_callcharge callcharge;
> v_refid refid;
> v_codtipc cod_tipopc;
> v_codsubtippc =A0cod_stip_pc;
> v_codnatcta cod_nat_cta;
> v_codsegcta cod_seg_cta;
> v_coddept codigodepartamento;
> v_nroinsc numeroinscripcion;
> v_codzonal codigozonal;
> v_expire expiredate;
> v_tipotelefono tipotelefono;
> v_valorfacial valorfacial;
> BEGIN
>
> SELECT /*+index(rg) index(st1) +*/
> =A0 =A0 =A0 =A0rg.codigoregistroactivity,
> =A0 =A0 =A0 =A0rg.periodo =A0 =A0 =A0AS periodo,
> =A0 =A0 =A0 =A0rg.aparty =A0 =A0 =A0 AS telefono,
> =A0 =A0 =A0 =A0rg.bparty =A0 =A0 =A0 AS telefonob,
> =A0 =A0 =A0 =A0rg.Tipotelefonoorigen AS torigen,
> =A0 =A0 =A0 =A0rg.Tipotelefonodestino AS tdestino,
> =A0 =A0 =A0 =A0rg.Callclass AS Callclass,
> =A0 =A0 =A0 =A0rg.startdatetime AS fecha,
> =A0 =A0 =A0 =A0rg.rao,
> =A0 =A0 =A0 =A0rg.tipollamada AS tipollamada,
> =A0 =A0 =A0 =A0rg.duration =A0 =A0 AS duracion,
> =A0 =A0 =A0 =A0rg.callcharge =A0 AS soles,
> =A0 =A0 =A0 =A0rg.refid =A0 =A0 =A0 =A0AS refid,
> =A0 =A0 =A0 =A0rg.cod_tipopc =A0 AS tipopc,
> =A0 =A0 =A0 =A0rg.cod_stip_pc =A0AS subtipo,
> =A0 =A0 =A0 =A0rg.cod_nat_cta =A0AS codnat,
> =A0 =A0 =A0 =A0rg.cod_seg_cta =A0AS segcta,
> =A0 =A0 =A0 =A0rg.codigodepartamento AS coddept,
> =A0 =A0 =A0 =A0rg.numeroinscripcion AS numins,
> =A0 =A0 =A0 =A0rg.codigozonal =A0AS codzon,
> =A0 =A0 =A0 =A0rg.expiredate AS expiredate,
> =A0 =A0 =A0 =A0rg.tipotelefono as tipotelefono,
> =A0 =A0 =A0 =A0DENOMINACIONSELNUMTARJETA_W(rg.refid) AS denominacion
>
> BULK COLLECT INTO v_codigo ,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_periodo,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_aparty,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_bparty,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipotelefoori,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipotelefodes,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_callclas,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_startdate,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_rao,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipollamada,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_duration,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_callcharge,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_refid,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codtipc,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codsubtippc,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codnatcta,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codsegcta,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_coddept ,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_nroinsc ,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codzonal,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_expire ,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipotelefono,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_valorfacial
> =A0FROM reg_tmptrafico rg
> =A0WHERE ( rg.periodo =3D p_fecha || '00' OR =A0 rg.periodo =3D p_fecha |=
|
> '01'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '02' OR rg.periodo =3D p_fecha |=
| '03'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '04' OR rg.periodo =3D p_fecha |=
| '05'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '06' OR rg.periodo =3D p_fecha |=
| '07'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '08' OR rg.periodo =3D p_fecha |=
| '09'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '10' OR rg.periodo =3D p_fecha |=
| '11'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '12' OR rg.periodo =3D p_fecha |=
| '13'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '14' OR rg.periodo =3D p_fecha |=
| '15'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '16' OR rg.periodo =3D p_fecha |=
| '17'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '18' OR rg.periodo =3D p_fecha |=
| '19'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '20' OR rg.periodo =3D p_fecha |=
| '21'
> =A0 =A0 =A0 OR rg.periodo =3D p_fecha || '22' OR rg.periodo =3D p_fecha |=
|
> '23');
>
> =A0FORALL i IN v_codigo.FIRST..v_codigo.LAST
> =A0 INSERT /*+ APPEND*/ INTO =A0REG_TMPRESUMEN1
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (codigoregistroactivity,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 periodo,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 aparty,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 bparty,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tipotelefonoorigen,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tipotelefonodestino,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 callclass,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 startdatetime,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 rao,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tipollamada,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 duration,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 callcharge,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 refid,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 cod_tipopc,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 cod_stip_pc,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 cod_nat_cta,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 cod_seg_cta,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 codigodepartamento,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 numeroinscripcion,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 codigozonal,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 expiredate,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tipotelefono,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 valorfacial)
> =A0 =A0 =A0 =A0 =A0VALUES( v_codigo(i) ,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_periodo(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_aparty(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_bparty(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipotelefoori(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipotelefodes(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_callclas(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_startdate(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_rao(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipollamada(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_duration(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_callcharge(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_refid(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codtipc(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codsubtippc(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codnatcta(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codsegcta(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_coddept(i) ,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_nroinsc(i) ,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_codzonal(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_expire(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_tipotelefono(i),
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 v_valorfacial(i) =A0);
>
> COMMIT;
>
> END SPGT147_CARGA_REGTMPRESUMEN;
>
> 2.-CREATE OR REPLACE FUNCTION DENOMINACIONSELNUMTARJETA_W
> =A0 =A0 =A0( p_NumeroTarjeta IN Tarjetas.Numerotarjeta%Type
> =A0 =A0 =A0 -- p_FechaExpiracion IN Tarjetas.Fechaexpiracionsinuso%TYPE
> =A0 =A0 =A0) --RETURN SeriesTarjeta.Codigoserietarjeta%TYPE
> RETURN NUMBER
>
> AS
> =A0 v_CodigoDenominacion SeriesTarjeta.Codigodenominaciontarjeta%TYPE;
> BEGIN
>
> =A0 =A0 SELECT /*+index(st)+*/st.codigodenominaciontarjeta
> =A0 =A0 INTO v_CodigoDenominacion
> =A0 =A0 FROM seriestarjeta st
> =A0 =A0 WHERE st.codigoserietarjeta =3D (SELECT/*+index(st)+*/
> MAX(st.codigoserietarjeta)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0FR=
OM SeriesTarjeta st
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0WH=
ERE st.numeroinicio <=3D
> p_NumeroTarjeta AND
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0st.numerofin >=3D
> p_NumeroTarjeta );
>
> =A0 =A0 RETURN(v_CodigoDenominacion);
> EXCEPTION
> =A0 =A0WHEN no_data_found THEN
> =A0 =A0 =A0 v_CodigoDenominacion :=3D NULL;
> =A0 =A0 =A0 RETURN(v_CodigoDenominacion);
> END;
>
> demora mas de =A01 hora
>
> reg_tmptrafico =A0=3D 400,000
> seriestarjeta =A0=3D28817

=BFPor qu=E9 no simplemente INSERT /*+ APPEND */ INTO ... SELECT ...? Esto
parece ser directo y ejecutar=E1 definitivamente lo m=E1s eficientemente
posible. Ninguna necesidad de PL/SQL aqu=ED=85

Regards,
   Vladimir M. Zakharychev
   N-Networks, makers of Dynamic PSP(tm)
   http://www.dynamicpsp.com

p.s. Sorry if my Spanish is not syntactically or semantically correct
- I don't speak it and just used a translation service on this:

Why not just INSERT /*+ APPEND */ ... SELECT ...? This seems to be
straightforward and will definitely execute the most efficiently. No
need for PL/SQL here...

Hope the translation is comprehensible. :)
