Autonuméricos en Oracle…

 

 

Si hay algo que usted noble desarrollador, sabrá, sobretodo si usa Oracle, es que este por su definición no soporta autonuméricos, ahora bien, usted noble desarrollador, sabrá (sobretodo si es desarrollador de Oracle) que este tiene secuencias, que pueden ser bastante útiles pero algunas veces (sobretodo cuando usamos frameworks de terceros como nhibernate o .netTiers) podemos usar el truco que les doy para crear autonuméricos en Oracle
Este truco dista de ser elegante, pero es bastante útil y funciona bastante bien

Primero la Tabla:

   1:  -- Create table
   2:   
   3:  create table INVSITE
   4:  (
   5:    SITE       VARCHAR2(4) not null,
   6:    TIPOMOV    VARCHAR2(2) not null,
   7:    FECHA      DATE,
   8:    NUMDOC     NUMBER(10),
   9:    VENDOR     VARCHAR2(10),
  10:    PLU        VARCHAR2(18) not null,
  11:    CANTIDAD   NUMBER(14,4),
  12:    ANO        VARCHAR2(4) not null,
  13:    MES        VARCHAR2(2) not null,
  14:    ARCHIVO    VARCHAR2(50),
  15:    EAN        VARCHAR2(18) not null,
  16:    ID_INVSITE NUMBER not null
  17:  )
  18:  tablespace CORS
  19:    pctfree 10
  20:    initrans 1
  21:    maxtrans 255
  22:    storage
  23:    (
  24:      initial 64K
  25:      minextents 1
  26:      maxextents unlimited
  27:    );
  28:   
  29:  -- Create/Recreate primary, unique and foreign key constraints
  30:   
  31:  alter table INVSITE
  32:    add constraint PK_INVSITE primary key (ID_INVSITE)
  33:    using index
  34:    tablespace SIGEF
  35:    pctfree 10
  36:    initrans 2
  37:    maxtrans 255
  38:    storage
  39:    (
  40:      initial 64K
  41:      minextents 1
  42:      maxextents unlimited
  43:    );
  44:   
  45:  alter table INVSITE
  46:    add constraint FK_MAESTRA_INVSITE foreign key (PLU)
  47:    references MAESTRA (PLU);

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Ahora, la secuencia

   1:  -- Create sequence
   2:   
   3:  create sequence SEQ_INVSITE
   4:  minvalue 1
   5:  maxvalue 999999999999999999999999999
   6:  start with 401
   7:  increment by 1
   8:  cache 20;

Aquí tenemos un trigger que se encarga de la magia

 

   1:  create or replace trigger TRG_INVSITE --> nombre del trigger
   2:    before insert on INVSITE --> table afectada
   3:  for each row
   4:   
   5:  begin
   6:      select SEQ_INVSITE.NEXTVAL --> secuencia que controla el autonumerco
   7:      into :new.ID_INVSITE --> nombre de la table y campo clave
   8:      from dual; --> la clausula from en oracle es obligatoria, con esto, usamos la tabla dual que es una tabla de sistema (ref http://www.adp-gmbh.ch/ora/misc/dual.html)
   9:  end TRG_INVSITE;

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

bueno, este truco no es mío pero, es bastante útil y lo mejor de todo, esto funciona bastante bien, si tienen algun truco, envienmelo por correo a bpbrainiak arroba gmail.com y yo publicaré su truco (previa validación)  y lo mencionare como autor de el truco

 

saludos y dejen sus posts

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s


Follow

Get every new post delivered to your Inbox.