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