none
triger oracle a sql RRS feed

  • Pregunta

  • buenas noches , estoy migrando mi bd de oracle a sql , y tengo 2 trigger q necesito migrar o rehacerlos en sql , alguna sugerencia ? , soy bastante neofito con sql porq no es con lo que acostumbro a trabajar , alguna sugerencia o guia ?, gracias

    Vive rapido muere joven y tu cadaver sera bello

    viernes, 24 de agosto de 2012 1:10

Todas las respuestas

  • pero esos triger que funcionalidad realizan ?

    http://www.devjoker.com/contenidos/catss/278/Triggers-en-Transact-SQL.aspx

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 24 de agosto de 2012 12:14
  • Bueno 1 en el evento before insert lo que hace es limpiar las variables n base a una condicion

    y el segundo (el que realmente me importa) es en el evento afert insert , me hace un sql de otras tablas para rescatar un valor que se necesita para hacer otro insert en otra tabla , te anexo el codigo para ver en que me puedes ayudar

    CREATE OR REPLACE TRIGGER BIOSTAR.P1
    AFTER INSERT
    ON BIOSTAR.TB_EVENT_LOG
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    DECLARE
    tmpVar NUMBER;
    CEDULA NUMBER;
    STATUS VARCHAR2(1);
    FECHA  VARCHAR2(10);
    FECHAS DATE;
    TEXTO VARCHAR2(36);
    NUMERO NUMBER;
    TURNO NUMBER;
    R2 NUMBER;
    /******************************************************************************
       NAME:       P1
       PURPOSE:    

       REVISIONS:
       Ver        Date        Author           Description
       ---------  ----------  ---------------  ------------------------------------
       1.0        15/11/2011             1. Created this trigger.

       NOTES:

       Automatically available Auto Replace Keywords:
          Object Name:     P1
          Sysdate:         15/11/2011
          Date and Time:   15/11/2011, 02:30:23 p.m., and 15/11/2011 02:30:23 p.m.
          Username:         (set in TOAD Options, Proc Templates)
          Table Name:      TB_EVENT_LOG (set in the "New PL/SQL Object" dialog)
          Trigger Options:  (set in the "New PL/SQL Object" dialog)
    ******************************************************************************/

    BEGIN
       tmpVar := 0;
       CEDULA := 0;
       STATUS := '0';
       FECHA := '0';
       NUMERO := 0;
       TEXTO := '0';
       


    CEDULA := :NEW.NUSERID;

    SELECT TB_USER_CUSTOMINFO.SFIELDVALUE5 , TB_USER_CUSTOMINFO.SFIELDVALUE6 INTO STATUS , FECHA FROM TB_USER_CUSTOMINFO TB_USER_CUSTOMINFO
    INNER JOIN TB_USER TB_USER ON TB_USER_CUSTOMINFO.NUSERIDN = TB_USER.NUSERIDN
    WHERE
    TB_USER.SUSERID = CEDULA;


    NUMERO := :NEW.ndatetime/86400;
    TEXTO := TO_CHAR(To_Date( '01/01/1970 12:00:00 AM','DD/MM/YYYY HH12:Mi:Ss AM') + NUMERO,'DD/MM/YYYY HH12:Mi:ss AM');


    R2 := TO_CHAR(To_Date('01/01/1970','DD/MM/YYYY') + :NEW.ndatetime/86400,'D') ;


    SELECT NDS INTO TURNO
    FROM (


    SELECT R,NDS,N2,NSD,D,ROW_NUMBER() OVER (ORDER BY NSD ASC) T
    FROM (

    SELECT ROWNUM R,NDS,N2,NSD,D

    FROM (

    SELECT TB_TA_SHIFT_DAILY.NDAILYSCHEDULEIDN NDS,TB_TA_SHIFT.SNAME N2 ,TB_TA_SHIFT.NSHIFTIDN ,TB_TA_SHIFT_DAILY.NSHIFTDAILYIDN NSD,TO_CHAR(To_Date('01/01/1970','DD/MM/YYYY') + 1345621293/86400,'D') D,TO_CHAR(To_Date( '01/01/1970 12:00:00 AM','DD/MM/YYYY HH12:Mi:Ss AM') + 1345621293/86400,'DD/MM/YYYY HH12:Mi:ss AM'),TO_CHAR(To_Date( '01/01/1970 12:00:00 AM','DD/MM/YYYY HH12:Mi:Ss AM') + TB_TA_SHIFT.NSTARTTIME/86400,'DD/MM/YYYY HH12:Mi:ss AM') , TO_CHAR(To_Date( '01/01/1970 12:00:00 AM','DD/MM/YYYY HH12:Mi:Ss AM') + TB_TA_SHIFT.NENDTIME/86400,'DD/MM/YYYY HH12:Mi:ss AM')FROM TB_TA_SHIFT_DAILY TB_TA_SHIFT_DAILY
    INNER JOIN TB_TA_SHIFT TB_TA_SHIFT ON TB_TA_SHIFT.NSHIFTIDN = TB_TA_SHIFT_DAILY.NSHIFTIDN
    INNER JOIN TB_TA_USER TB_TA_USER ON TB_TA_SHIFT.NSHIFTIDN = TB_TA_USER.NTAIDN
    INNER JOIN TB_USER TB_USER ON TB_TA_USER.NUSERIDN = TB_USER.NUSERIDN
    WHERE TB_TA_SHIFT.NSTARTTIME <= :NEW.ndatetime AND TB_TA_SHIFT.NENDTIME >= :NEW.ndatetime AND TB_USER.SUSERID = CEDULA
    AND  TB_TA_USER.NTYPE = 0

    ORDER BY  TB_TA_SHIFT.NENDTIME ASC


    )



    )

    WHERE R < 8  

    ORDER BY NSD ASC

    )

    WHERE  T = TO_CHAR(To_Date('01/01/1970','DD/MM/YYYY') + :NEW.ndatetime/86400,'D') ;




    if :NEW.NEVENTIDN = 55 AND STATUS = '0' AND :NEW.NREADERIDN <> 50070  AND :NEW.NISLOG = 0 THEN

    INSERT INTO PRUEBA (CED,EQUIPO,H1,IND,TURNO)
    VALUES (CEDULA,:NEW.NREADERIDN,TO_DATE(TEXTO,'DD/MM/YYYY HH12:Mi:Ss AM'),:NEW.NEVENTLOGIDN,TURNO);


    end if;

    END P1;



    --/

    gracias  de antemano


    Vive rapido muere joven y tu cadaver sera bello

    viernes, 24 de agosto de 2012 12:30