Intereting Posts
.NET на удаленный SQL Server медленный на одной машине, а не на другой Как вставить в столбец, имя которого является ключевым словом sql Выбор Oracle JDBC с возвратом WHERE 0 Как показывать пробелы в столбцах, которые не имеют данных в oracle Как добавить секунды к отметке времени начала, чтобы я мог получить предполагаемую дату окончания? SQL: объединение цепей эффективности Сценарий скрипта SQL Loader с добавлением SYSDATE, USER Удалить все, кроме вершины n из таблицы базы данных в SQLite для java / android INSERT строки в несколько таблиц в одном запросе, выбирая из вовлеченной таблицы Производительность подсчета mysql Что я могу сделать, чтобы вернуть результаты SQL в определенных ситуациях? Фильтровать sql на основе списка C # вместо таблицы фильтров Sql – Явный порядок условий ГДЕ? Оптимизация структуры таблиц MySQL с миллионами записей SQL-запрос для индекса / первичного ключа

динамическое переключение имени таблицы и столбца с использованием переменных связывания

Есть ли способ динамически передавать имена столбцов и таблиц в запрос с использованием переменных связывания? Это можно сделать, используя простой оператор конкатенации || , но мне нужен другой подход, по которому это может быть достигнуто.

РЕДАКТИРОВАТЬ

 OPEN abc_cur FOR 'Select :column_name from :table_name' USING column_name,table_name; 

В этом примере я передаю column_name как empno,ename и table_name как emp

Но этот подход не работает для меня. Возможно ли иметь другой подход, другой, что традиционный подход конкатенации?

Имена таблиц и столбцов не могут быть переданы как переменные связывания, нет. Весь смысл переменных привязки заключается в том, что Oracle может генерировать план запроса один раз для оператора, а затем выполнять его много раз с разными значениями переменных привязки. Если оптимизатор не знает, к какой таблице обращаются или какие столбцы выбираются и фильтруются, он не может сформировать план запроса.

Если ваша озабоченность связана с атаками SQL-инъекций и предполагается, что динамический SQL действительно необходим (в большинстве случаев необходимость прибегать к динамическому SQL подразумевает проблемы с моделью данных), вы можете использовать пакет DBMS_ASSERT для проверки того, что имена таблиц и имена столбцов не содержат встроенного SQL.

Нет, ты не можешь. Изменение имен таблиц или столбцов в запросе изменяет семантику этого запроса, т. Е. Становится другим запросом.

Переменные Bind – это передача разных значений в один и тот же запрос. Оптимизатор может повторно использовать запрос с разными значениями без необходимости повторного анализа и оптимизации.