冒号在SQL查询中签名“:”做什么?

时间:2010-02-01 15:54:34

标签: sql oracle plsql bind-variables

:在查询中代表什么?

INSERT INTO MyTable (ID) VALUES (:myId)

如何获取所需的值?

编辑:那个标志叫什么?我想在谷歌搜索,但:的名称是什么?

8 个答案:

答案 0 :(得分:52)

“:”在查询中代表什么?

A bind variable。绑定变量允许多次重复使用单个SQL语句(无论是查询还是DML),这有助于提高安全性(通过禁止SQL注入攻击)和性能(通过减少所需的解析量)。

如何获取所需的值?

在Oracle执行查询(或DML)之前,您的程序将创建一个游标。您的程序发出要为该游标解析的SQL,然后它必须绑定SQL引用的每个绑定变量的值。如何做到这一点取决于语言。

这个标志叫什么?

冒号。

答案 1 :(得分:44)

在Oracle中称为bind variable

  

“:”的名称是什么?

科隆。

答案 2 :(得分:6)

这是命名查询参数的标记,不是查询实际语法的一部分。标记将替换为在实际运行之前进行查询的代码中指定的某个值。

答案 3 :(得分:5)

这是named parameter

在C#中,您在参数前加上@(参见here)。

答案 4 :(得分:5)

在HQL Hibernate查询语言中使用冒号:来表示涉及参数。

那意味着: SQL语法:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID

与HQL语法相同:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID

empID是参数的局部变量...

希望这有帮助。

答案 5 :(得分:4)

考虑以下陈述

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都会检查以前出现的同一查询。如果找到相同的查询,则会使用相同的执行计划。如果没有,它必须找到各种执行路径,提出最佳执行计划并执行它。

与人类不同,它不够智能,只能认识到id已经改变(如上例所示)。因此,它经历了所有的斗争并执行它。

但有一种方法可以告诉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确实使用绑定变量(您无需明确告诉它)

答案 6 :(得分:1)

这也是Delphi查询的参数语法

答案 7 :(得分:-1)

发现此视频的前几分钟非常有用:https://www.youtube.com/watch?v=K6VfcRALxW4

提取:它被称为绑定变量,这是等待接收的用户输入的占位符