› Fóruns › Banco de dados Oracle › Em que tabela/campo consigo texto de triggers VARCHAR2? › Em que tabela/campo consigo texto de triggers VARCHAR2?
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,