Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Secuencias en Oracle

Errar es de humanos; incluso yo me equivoco también de vez en cuando. En la impresión final de La Cara Oculta de Delphi 4 se deslizó, a última hora, un error, al describir cómo se puede obtener el valor de una secuencia de Oracle (página 527). Resulta que el error ya había sido detectado durante la fase de revisión, pero la página que entregué para imprimir fue finalmente la incorrecta. De todos modos, en el CD-ROM del libro el código, evidentemente, es el correcto.

El ejemplo en cuestión utilizaba una secuencia definida del siguiente modo:

Código SQL [-]
create sequence CodigoCliente increment by 1 start with 1;

La idea es que podemos obtener valores secuenciales de este objeto mediante el pseudo atributo NextVal. En el libro se incluía el siguiente trigger para demostrar cómo podía utilizarse NextVal:

Código SQL [-]
create or replace trigger BIClient
    before insert on Clientes for each row
begin
    if :new.Codigo is null then
        :new.Codigo := CodigoCliente.NextVal;    // ¡¡¡INCORRECTO!!!
    end if;
end;

Aunque el código anterior tiene un aspecto bastante razonable y es bastante sencillo, Oracle (por algún misterioso motivo) no lo acepta. La forma correcta de obtener el próximo valor de una secuencia es como muestro a continuación:

Código SQL [-]
create or replace trigger BIClient
    before insert on Clientes for each row
begin
    if :new.Codigo is null then
        select CodigoCliente.NextVal            // ¡¡¡AHORA SI!!!
        into   :new.Codigo
        from   Dual;
    end if;
end;

Dual es una tabla especial, predefinida por Oracle, que siempre tiene una sola fila, y se utiliza en trucos sucios y retorcidos como este que acabo de mostrar.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:18:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi