Pular para o conteúdo

Fóruns Banco de dados Oracle Em que tabela/campo consigo texto de triggers VARCHAR2? Em que tabela/campo consigo texto de triggers VARCHAR2?

#97641
burga
Participante

    Não é difícil encontrar uma TRIGGER que ultrapasse 4000 bytes de código.
    No PL/SQL o limite de tamanho pra um campo do tipo VARCHAR2 chegar a 32767 bytes mas no SQL o limite é de 4000.

    Se você quer fazer esta chamada dentro de uma instrução SQL, é difícil pois vai dar muitos problemas em relação a códigos de TRIGGERs com mais do que 4000 bytes.

    O mais garantido a refazerseu procedimento mesmo.

    Mas se ainda quiser testar, segue uma maneira de buscar o codigo de uma TRIGGER em um campo VARCHAR2, usei a cláusula MODEL pra isso:
    WITH T AS (
    SELECT LINE,
    TEXT,
    OWNER,
    NAME,
    MAX(LINE) OVER (PARTITION BY OWNER, NAME) NR_LINHA,
    LEAD(LENGTH(TEXT)) OVER (PARTITION BY OWNER, NAME ORDER BY LINE) TAM_PROX
    FROM DBA_SOURCE
    WHERE OWNER = 'OWNER_DA_TRIGGER'
    AND TYPE = 'TRIGGER'
    AND NAME = 'NOME_TRIGGER'
    ORDER BY 1 )
    SELECT TEXT2
    FROM (
    SELECT TEXT2
    FROM T
    MODEL
    PARTITION BY (T.OWNER, T.NAME)
    DIMENSION BY (T.LINE)
    MEASURES (TEXT, CAST(NULL AS VARCHAR2(4000)) AS TEXT2, 0 AS I, NR_LINHA, 0 AS I2, TAM_PROX)
    RULES ITERATE (4000000) UNTIL (I[1] >= NR_LINHA[1] OR I2[1] > 4000)
    ( TEXT2[1] = TEXT2[1] || TEXT[I[1]],
    I[1] = I[1] + 1,
    I2[1] = LENGTH(TEXT2[1])+TAM_PROX[I[1]])
    )
    WHERE TEXT2 IS NOT NULL;

    Se o código da TRIGGER ultrapassar os 4000 bytes, o codigo não retornará completo.

    Abraços,