#teradata
#teradata
Вопрос:
Согласно документации Teradata, управляющие инструкции BEGIN и END могут иметь метки. Однако попытка создать следующую хранимую процедуру
create multiset table table_1
(
id int not null,
val int
) unique primary index(id);
create procedure test_sp(IN p1 int, IN p2 INT)
L1: BEGIN
INSERT INTO table_1 VALUES(:p1,:p2);
END L1;
выдает следующую ошибку:
SPL1048:E (L5), неожиданный текст ‘;’ вместо инструкции SPL. SPL1027:E(L5), отсутствующая / недопустимая инструкция SQL ‘E(3707): синтаксическая ошибка, ожидалось что-то вроде ключевого слова ‘END’ между ‘;’ и командой CREATE PROCEDURE произошел сбой.
Без меток «L1» код работает просто отлично. С другой стороны, наличие меток внутри процедуры работает:
replace procedure test_sp(IN p1 int, IN p2 INT)
BEGIN
L1: BEGIN
INSERT INTO table_1 VALUES(:p1,:p2);
END L1;
END;
Это параметр конфигурации или ошибка в документации?
Комментарии:
1. Вероятно, ошибка не связана с метками. У меня ваш код работает нормально. Но строка 5
SPL1048:E(L5)
, которая вызвала ошибку, не существует в вашем create.2. Я подозреваю, что это проблема клиента, и запрос процедуры СОЗДАНИЯ, отправленный в базу данных, был усечен при первом ‘;’ — и на него ссылаются как на строку 5 только потому, что в запросе есть несколько пустых строк.
3. Возможно, что ваш клиент выполняет одновременно одну инструкцию, закрытую символом «;», из-за чего, возможно, произошел сбой первого набора.
4. Я только что протестировал другой клиент (Teradata SQL Assistant), и он работает так, как ожидалось. Определенно проблема с хамелеоном запросов Nexus. Спасибо.