Что делает знак двоеточия ":" в запросе SQL? - PullRequest
40 голосов
/ 01 февраля 2010

Что означает : в запросе?

INSERT INTO MyTable (ID) VALUES (:myId)

Как получить нужное значение?

Редактировать: И как называется этот знак? Я хотел найти в Google, но как называется :?

Ответы [ 7 ]

52 голосов
/ 02 февраля 2010

Что означает ":" в запросе?

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

Как получить нужное значение?

Прежде чем запрос (или DML) будет выполнен Oracle, ваша программа создаст курсор. Ваша программа выдает SQL для анализа для этого курсора, затем она должна связать значения для каждой переменной связывания, на которую ссылается SQL. Как это сделать, зависит от языка.

Как называется этот знак?

Двоеточие.

44 голосов
/ 01 февраля 2010

В Oracle это называется связывающей переменной .

как называется ":"?

Colon.

6 голосов
/ 01 февраля 2010

Это тег для именованного параметра запроса, который не является частью фактического синтаксиса запроса. Тег заменяется некоторым значением, указанным в коде, который выполняет запрос до его фактического запуска.

5 голосов
/ 25 мая 2011

Двоеточие : используется в HQL Hibernate Query Language для обозначения наличия параметра.

Так что это означает: SQL SYNTAX:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID

совпадает сСинтаксис HQL:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID

empID - локальная переменная для параметров ...

Надеюсь, это поможет.

5 голосов
/ 01 февраля 2010

Это именованный параметр .

В C # перед параметром ставится @ (см. здесь ).

4 голосов
/ 09 мая 2017

Рассмотрим следующие утверждения

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 VARIABLE . Пожалуйста, найдите пример ниже:

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;

Использование переменных Bind помогает повысить производительность в десять раз. PL / SQL использует переменные связывания самостоятельно (вам не нужно явно указывать это)

1 голос
/ 01 февраля 2010

это также синтаксис параметра для запроса Delphi

...