2015-12-01 4 views
1

У меня возникла сложная проблема, когда я пытаюсь запустить хранимую процедуру через 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

Спасибо и Приветствия.

+0

Вам не нужен терминатор в динамическом SQL, потому что вы можете запускать только один оператор за раз: '' <'|| PARAM_NUMBER; ' – mustaccio

ответ

0

Итак, наконец, для меня это был знак комментария: SET V_SQL = 'SELECT DISTINCT' || PARAM_COLUMNNAME || 'FROM' || PARAM_TABLENAME || ' WHERE '|| PARAM_COLUMNNAME ||' < '|| PARAM_NUMBER ||'; '; -

Объяснение, которое я не уверен, почему таким образом передается механизм базы данных, но работал. Спасибо!