none
Duvida com vetor e for dentro de uma tigger

    Question

  • Galera preciso cria uma tigger que quando disparada executa um select e o mesmo armazenar o resultado em uma matriz e com esses valor executa um insert dentro de um FOR.

    Minha duvida é como criar o vetor e armazena um resultado de um SELECT dentro do vetor.

    Tudo isso dentro da tigger.

    seria tipo assim:

    vetor A=select PRO_COD FROM TB_PRODUTO WHERE PRO_STA=1;

    for i in 1..A.LENGT loop

    insert into TB_COD_P(COD_P_COD) values (A[i]);

    Antecipo agradecimentos....

     

    Tuesday, September 27, 2011 6:46 PM

Answers

  • Lennon,

     

    Veja se este exemplo te ajuda.

    --CRIACAO DE TABELAS

    CREATE TABLE T1 (PRO_STA INT, PRO_COD INT)

    CREATE TABLE T2 (COD_P_COD INT)

    CREATE TABLE T3 (PRO_STA INT)

    --CARGA DE DADOS

    INSERT INTO T1 VALUES

    (1,1),

    (1,2),

    (1,3),

    (2,1),

    (3,1),

    (3,2)

     

    --TRIGGER PARA T2

    CREATE TRIGGER I_T3 ON dbo.T3

    FOR INSERT

    AS

    BEGIN

    INSERT INTO T2

    SELECT PRO_COD

    FROM T1 a INNER JOIN INSERTED b

    ON (a.PRO_STA = b.PRO_STA)

    END

     

    --EXPLICACAO

    /*

    Cada valor inserido na tabela T3, ira disparar a trigger, e pegar todos os valores

    da tabela t1 que o pro_sta seja igual ao valor inserido, e inserir na tabela t2*/

     

    --INSERT DE TESTE

    INSERT INTO T3 VALUES(3)

     

    --SELECT NA T2

    SELECT * FROM T2

    /*

    1

    2

    */


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    Tuesday, September 27, 2011 7:29 PM

All replies

  • Boa tarde Lennon,

    Você deve utilizar uma tabela temporária para este fim.

    Espero ter ajudado, se for o caso, marque como útil e como resposta.

    Até mais.


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin
    Classifique as respostas. O seu feedback é essencial.
    Tuesday, September 27, 2011 6:59 PM
  • Lennon

     

    Creio que voce esta com uma linguagem de programação tentando adaptar para o TSQL, vamos la.

    Pelo que entendi, a melhor opção é voce trabalhar com cursor, mas saiba que não existe vetor em TSQL, e nem a função LENTH(), voce tera de adaptar de outras maneiras, se puder postar um exemplo, posso t ajudar.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    Tuesday, September 27, 2011 7:00 PM
  • Fabrizzio sim utilizo c# mas se for faze o mesmo junco com c# eu sei fazer a necessidade de ser dentro da tigger é pq é um processo demorado e o sistema roda pela internet então queria disparar o mesmo em uma tigger.

     

    Vou tenta explica melhor.

    Quando a tigger dispara preciso q faça uma consulta

    Exemplo:

    SELECT PRO_COD FROM TB_PRODUTO WHERE PRO_STA=1

     

    Vamos supor q retorna:

     

    PRO_COD
    1
    4
    56
    74
    85

    Esse resultado preciso usar eles pra fazer uma inserção.

    Mas preciso q seja dinâmico pois pode retorna 10 resultados ou até 500

    Então preciso dentro de um FOR

     

    insert into TB_COD_P(COD_P_COD) values (1);

    insert into TB_COD_P(COD_P_COD) values (4);

    insert into TB_COD_P(COD_P_COD) values (56);

    insert into TB_COD_P(COD_P_COD) values (74);

    insert into TB_COD_P(COD_P_COD) values (85);

     

    esses 5 comando preciso q fique dentro do FOR pra fica dinâmico.

     

    O length posso alterar por o seguinte comando utilizando o SUM

    SELECT SUM(PRO_COD) FROM TB_PRODUTO WHERE PRO_STA=1

     

    Entendeu mais ou menos?

    Tuesday, September 27, 2011 7:16 PM
  • Lennon

     

    Só mais uma duvida, entendi sim, e existe uma maneira muito mais simples de se resolver.

    A trigger dispara em algum evento, qual seria exatamente o evento que voce quer? Ou voce que ira chamar ela quando necessario? Pois se voce for chamar ela conforme sua necessidade, estamos falando de uma procedure e não uma trigger....


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    Tuesday, September 27, 2011 7:20 PM
  • sim mas tem q ser tigger pq vai dispara quando eu fizer uma inserção em outra tabela.
    Tuesday, September 27, 2011 7:22 PM
  • Lennon,

     

    Veja se este exemplo te ajuda.

    --CRIACAO DE TABELAS

    CREATE TABLE T1 (PRO_STA INT, PRO_COD INT)

    CREATE TABLE T2 (COD_P_COD INT)

    CREATE TABLE T3 (PRO_STA INT)

    --CARGA DE DADOS

    INSERT INTO T1 VALUES

    (1,1),

    (1,2),

    (1,3),

    (2,1),

    (3,1),

    (3,2)

     

    --TRIGGER PARA T2

    CREATE TRIGGER I_T3 ON dbo.T3

    FOR INSERT

    AS

    BEGIN

    INSERT INTO T2

    SELECT PRO_COD

    FROM T1 a INNER JOIN INSERTED b

    ON (a.PRO_STA = b.PRO_STA)

    END

     

    --EXPLICACAO

    /*

    Cada valor inserido na tabela T3, ira disparar a trigger, e pegar todos os valores

    da tabela t1 que o pro_sta seja igual ao valor inserido, e inserir na tabela t2*/

     

    --INSERT DE TESTE

    INSERT INTO T3 VALUES(3)

     

    --SELECT NA T2

    SELECT * FROM T2

    /*

    1

    2

    */


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    Tuesday, September 27, 2011 7:29 PM
  • Fabrizzio deu certo maninho cara vlw pelo exemplo foi estudando o mesmo e consegui compreender, cara to até passado com o que da pra faze com esse tipo de inserção, vlw mesmo muito obrigado.......

    Wednesday, September 28, 2011 12:01 AM