Как включить 'в динамический запрос? - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно сгенерировать запрос, подобный этому

SELECT max (batch_sk) INTO ln_batch FROM test_app.table WHERE category_cd = 'ABC';

Этот 'ABC' используется в качестве входного параметра в процедуре (in_code). Я пробовал другую версию нижеупомянутого запроса, но не получил правильный запрос.

SET lv_query = 'SELECT max (batch_sk) INTO ln_batch FROM test_app.table ГДЕ category_cd = '' '' || in_code || '';

Как включить их в запрос?

1 Ответ

0 голосов
/ 30 мая 2019

Несколько вещей здесь не так.

  1. Несоответствующие / неэкранированные кавычки
  2. Конкатенация работает со строками символов, и не существует неявного преобразования из TIMESTAMP в VARCHAR.Вам потребуется преобразовать с явным CAST или TO_CHAR и т. Д. Сначала
  3. SELECT … INTO не допускается в качестве динамического SQL.Возможно параметризованный статический SQL с переменной хоста?

    SELECT max(batch_sk) INTO ln_batch FROM test_app.table WHERE categ_cd=:in_code;

    в противном случае вам необходим динамический курсор для предоставления значения в виде литерала

    DECLARE lv_cur CURSOR for lv_stmt;
    SET lv_query ='SELECT max(batch_sk) FROM test_app.table WHERE categ_cd = '''||in_code||'''';
    PREPARE lv_stmt FROM lv_query;
    OPEN lv_cur;
    FETCH  lv_cur INTO ln_batch;
    CLOSE lv_cur;
    
...