56

:在查询中代表什么?

INSERT INTO MyTable (ID) VALUES (:myId)

它如何获取所需的值?

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

4

8 回答 8

68

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

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

它如何获取所需的值?

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

那个牌子叫什么?

一个冒号。

于 2010-02-02T03:08:30.243 回答
51

这在 Oracle 中称为绑定变量。

“:”的名称是什么?

冒号。

于 2010-02-01T16:11:43.763 回答
11

HQL Hibernate Query Language 中使用冒号:表示涉及参数。

所以这意味着: SQL 语法:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID

与 HQL 语法相同:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID

empID作为参数的局部变量...

希望这可以帮助。

于 2011-05-25T19:18:29.737 回答
7

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

于 2010-02-01T15:57:16.500 回答
5

它是一个命名参数

在 C# 中,使用 @ 为参数添加前缀(请参阅此处)。

于 2010-02-01T15:57:11.287 回答
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;

使用绑定变量有助于将性能提高十倍。PL/SQL 确实使用了它自己的绑定变量(你不需要明确告诉它)

于 2017-05-09T13:12:35.493 回答
1

这也是 Delphi 查询的参数语法

于 2010-02-01T16:49:19.470 回答
-1

Found the first couple minutes of this video to be very useful: https://www.youtube.com/watch?v=K6VfcRALxW4

To extract: it's called a bind variable, this is a placeholder for the user input it's waiting to receive

于 2021-03-26T14:32:20.330 回答