Incluir com declaração no procedimento Teradata
estou a tentar criar um procedimento num banco de dados Teradata que inclui uma declaração with/recursive
e quando eu CALL
o procedimento, dá-me o erro "Expected something like a name or Unicode delimited identifier between ( and )"
. Apaguei todo o código que não gera o erro, e o que sobrou foi:
REPLACE PROCEDURE
--CALL
db.test()
BEGIN
-- calling proc bombs instead of inserting, running outside called proc ok
INSERT INTO db.tbl_lProcModKey
WITH b AS (
SELECT TransactionControlNumber, ClaimLineNo, modifier
FROM db.tbl_lMod)
SELECT TransactionControlNumber, ClaimLineNo, NULL AS modKey FROM b;
END
executar o código em Assistente SQL fora do procedimento funciona ok. Estou assumindo que este é o comportamento esperado para o nosso banco de dados na versão 14.10.07.08, mas há outra maneira de incluir este tipo de função em um processo agendado? Nós ... gosto de usar um pacote SSIS chamando o código na base de dados, tanto quanto possível, limitando a quantidade de código inserido no Pacote.
Obrigado por qualquer ajuda que possa dar.1 answers
WITH
não é suportado em procedimentos armazenados, mesmo em versões mais recentes. Aqui está o trecho da documentação 16.10 ("linguagem de manipulação de Dados SQL"):
Não é possível indicar um modificador de declarações com ou com uma instrução recursiva nas definições de qualquer um destes objectos da base de dados:
∘ Vistas e vistas recursivas
Triggers gatilhos
∘ procedimentos Armazenados
Tables tabelas derivadas