У меня возникла сложная проблема, когда я пытаюсь запустить хранимую процедуру через Squirrel с базой данных DB2. В хранимой процедуре есть часть, где объединить оператор SQL, как это:Squirrel Client DB2 Хранимая процедура Разделитель сеансов
SET V_SQL = 'SELECT DISTINCT ' || PARAM_COLUMNNAME || ' FROM '||PARAM_TABLENAME||' WHERE '||PARAM_COLUMNNAME||'<'||PARAM_NUMBER||';';
Я изменил сессии заявление В параметре; -> @ правильно выполнить вызов процедуры, но я получаю сообщение об ошибке:
Неожиданный токен "" был найден после "". Ожидаемые лексемы могут включают: "ГДЕ REP_ID < 201506" .. SQLCODE = -104, SQLSTATE = 42601, DRIVER = 3.59.81 SQL код: -104, SQL Состояние: 42601
Я предположил, что это происходит потому, что делимметра ';' из внутренней sql
сценария, так что я изменил код так:
SET V_SQL = 'SELECT DISTINCT ' || PARAM_COLUMNNAME || ' FROM '||PARAM_TABLENAME||' WHERE '||PARAM_COLUMNNAME||'<'||PARAM_NUMBER||'@';
Тогда я получаю сообщение:
числовой литерал "201506 @" не является действительным .. SQLCODE = -103, SQLSTATE = 42604, DRIVER = 3.59.81 Код SQL: -103, SQL Состояние: 42604
У вас есть идея?
Белка: SQuirreL клиента SQL-снимок 20150623_2101 DB2: 9,5
Спасибо и Приветствия.
Вам не нужен терминатор в динамическом SQL, потому что вы можете запускать только один оператор за раз: '' <'|| PARAM_NUMBER; ' – mustaccio