:
在查询中代表什么?
INSERT INTO MyTable (ID) VALUES (:myId)
如何获取所需的值?
编辑:那个标志叫什么?我想在谷歌搜索,但:
的名称是什么?
答案 0 :(得分:52)
“:”在查询中代表什么?
A bind variable。绑定变量允许多次重复使用单个SQL语句(无论是查询还是DML),这有助于提高安全性(通过禁止SQL注入攻击)和性能(通过减少所需的解析量)。
如何获取所需的值?
在Oracle执行查询(或DML)之前,您的程序将创建一个游标。您的程序发出要为该游标解析的SQL,然后它必须绑定SQL引用的每个绑定变量的值。如何做到这一点取决于语言。
这个标志叫什么?
冒号。
答案 1 :(得分:44)
答案 2 :(得分:6)
这是命名查询参数的标记,不是查询实际语法的一部分。标记将替换为在实际运行之前进行查询的代码中指定的某个值。
答案 3 :(得分:5)
在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
提取:它被称为绑定变量,这是等待接收的用户输入的占位符