Что делает знак двоеточия": "в SQL-запросе?
что значит :
стоять в запросе?
INSERT INTO MyTable (ID) VALUES (:myId)
как он получает желаемое значение?
Edit: также как называется этот знак? Я хотел искать в google, но как называется :
?
7 ответов
что означает":"в запросе?
A переменная bind. Переменные привязки позволяют многократно использовать одну инструкцию SQL (будь то запрос или DML), что помогает обеспечить безопасность (запрещая атаки SQL-инъекций) и производительность (уменьшая объем требуемого синтаксического анализа).
как он получает желаемое значение?
перед выполнением запроса (или DML) Oracle ваша программа создаст курсор. Ваша программа выдает SQL для анализа для этого курсора, затем она должна привязать значения для каждой переменной привязки, на которую ссылается SQL. Как это делается зависит от языка.
Как называется этот знак?
двоеточие.
Это тег для именованного параметра запроса, и не является частью синтаксиса запроса. Тег заменяется некоторым значением, указанным в коде, который делает запрос перед его фактическим запуском.
Это именованный параметр.
В C#, вы префикс параметра с @ (см. здесь).
используется в языке запросов HQL Hibernate для обозначения того, что есть параметр.
что это значит: СИНТАКСИС SQL:
SELECT * FROM EMPLOYEE WHERE EMP_ID = empID
совпадает с синтаксисом HQL:
SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID
empID
быть локальной переменной для параметров...
надеюсь, что это помогает.
рассмотрим следующие утверждения
select name from T_emp where id=1;
select name from T_emp where id=2;
select name from T_emp where id=3;
каждый раз при выполнении инструкции Oracle проверяет наличие предыдущих вхождений одного и того же запроса. Если он находит тот же запрос, он использует тот же план исполнение. Если нет, он должен найти различные пути выполнения, придумать оптимальный план выполнения и выполнить его.
В отличие от человека, он недостаточно умен, чтобы понять, что изменился только идентификатор(как в приведенном выше примере). Отсюда его пройти все борется и исполняет.
но есть способ сказать Oracle, что его аналогичный оператор и что он может использовать тот же план выполнения - ПЕРЕМЕННАЯ BIND. Смотрите пример ниже:
declare
v_id number;
v_name varchar2(30);
type c is ref cursor;
c1 c;
begin
for i in 1..100
loop
open c1 for 'select * from T_emp where id = :x' using i;
fetch c1 into v_name;
dbms_output.put_line('name is ' || v_name);
end loop;
END;
использование переменных привязки помогает повысить производительность в десять раз. PL / SQL использует переменные привязки самостоятельно (вам не нужно явно говорить об этом)