冒号“:”在 SQL 查询中起什么作用?

问题描述 投票:0回答:8

查询中的

:
代表什么?

INSERT INTO MyTable (ID) VALUES (:myId)

它如何获取所需的值?

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

:
的名字是什么?

sql oracle plsql bind-variables
8个回答
76
投票

查询中“:”代表什么?

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

它如何获取所需的值?

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

那个标志叫什么?

COLON (

:
) 字符表示绑定变量。


57
投票

这在 Oracle 中称为 绑定变量

“:”叫什么名字?

冒号。


18
投票

冒号

:
在HQL Hibernate查询语言中用于表示涉及到一个参数。

所以这意味着: SQL 语法:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID

与 HQL 语法相同:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID

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

希望这有帮助。


10
投票

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


6
投票

考虑以下陈述

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 确实使用自己的绑定变量(您不需要显式告诉它)


5
投票

它是一个命名参数

在 C# 中,您可以在参数前添加 @ 前缀(请参阅此处)。


1
投票

这也是 Delphi 查询的参数语法


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.