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.

Author: Beth, 2017-01-23

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

 0
Author: psur, 2018-08-20 10:55:12