Что означает знак толстой кишки ":" сделать в SQL-запросе?

StackOverflow https://stackoverflow.com/questions/2177978

Вопрос

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

INSERT INTO MyTable (ID) VALUES (:myId)

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

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

Это было полезно?

Решение

Это называется Переменная связывания в Oracle.

Как называется «:»?

Двоеточие.

Другие советы

Что делает ":" стоять в запросе?

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

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

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

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

Толстая кишка

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

Двоеточие : Используется в языке запросов HQL Hibernate для обозначения того, что есть участие параметра.

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

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID

так же, как синтаксис HQL:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID

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

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

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

В C #, вы префиксируете параметр с @ (см. здесь).

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

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, что это похожие заявление, и что он может использовать тот же план выполнения - Переменная связывания. Отказ Пожалуйста, найдите пример ниже:

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 использует переменные связывания самостоятельно (вам не нужно четко сказать)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top