SPL1048:E(L5), неожиданный текст ‘;’ вместо инструкции SPL

#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. Спасибо.