R sqlexecute подстановочный знак - PullRequest
0 голосов
/ 03 мая 2018

Используя RODBCext (и Teradata), мой SQL-запрос часто должен быть ограничен, и это делается с помощью оператора where. Тем не менее, это не всегда требуется, и было бы полезно не ограничивать, но я хотел бы использовать один запрос SQL. (Фактический запрос является более сложным и имеет несколько примеров того, что я пытаюсь применить здесь)

Чтобы вернуть все строки, использование подстановочного знака выглядит как следующий лучший вариант, но, похоже, ничего не работает правильно. Например, запрос sql:

SELECT *
FROM MY_DB.MY_TABLE
WHERE PROC_TYPE = ? 

Следующее работает при передаче строки для proc_type:

sqlExecute(connHandle, getSQL(SQL_script_path), proc_type, fetch = TRUE) 

Чтобы обойти этот фильтр, я бы хотел передать шаблон, чтобы все записи возвращались.

Я пытался proc_type установить '%', '*'. Также экранируется как с обратной косой чертой, так и в двойных кавычках, но строки не возвращаются и не выдают никаких ошибок.

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете использовать COALESCE, чтобы сделать это:

SELECT *
FROM MY_DB.MY_TABLE
WHERE PROC_TYPE = COALESCE(?, PROC_TYPE);

В случае, если ваш параметр равен NULL, он выберет PROC_TYPE для сравнения с PROC_TYPE, который вернет все.

Что касается вашей попытки подстановочного знака, вам придется переключиться на оператора, который может использовать подстановочный знак. Вместо =, например, LIKE. Я думаю, что в конечном итоге вы столкнетесь с некоторыми странными случаями, хотя в зависимости от вашего критерия поиска и данных в этом столбце, так что вариант COALESCE() - лучший способ.

...