:
在查询中代表什么?
INSERT INTO MyTable (ID) VALUES (:myId)
它如何获取所需的值?
编辑:还有那个标志叫什么?我想在谷歌上搜索,但名称是:
什么?
:
在查询中代表什么?
INSERT INTO MyTable (ID) VALUES (:myId)
它如何获取所需的值?
编辑:还有那个标志叫什么?我想在谷歌上搜索,但名称是:
什么?
“:”在查询中代表什么?
绑定变量。绑定变量允许多次重复使用单个 SQL 语句(无论是查询还是 DML),这有助于提高安全性(通过禁止 SQL 注入攻击)和提高性能(通过减少所需的解析量)。
它如何获取所需的值?
在 Oracle 执行查询(或 DML)之前,您的程序将创建一个游标。您的程序发出要为该游标解析的 SQL,然后它必须为 SQL 引用的每个绑定变量绑定值。如何做到这一点取决于语言。
那个牌子叫什么?
一个冒号。
HQL Hibernate Query Language 中使用冒号:
表示涉及参数。
所以这意味着: SQL 语法:
SELECT * FROM EMPLOYEE WHERE EMP_ID = empID
与 HQL 语法相同:
SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID
empID
作为参数的局部变量...
希望这可以帮助。
这是命名查询参数的标记,不是查询实际语法的一部分。该标记被替换为在实际运行之前进行查询的代码中指定的某个值。
考虑以下陈述
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 确实使用了它自己的绑定变量(你不需要明确告诉它)
这也是 Delphi 查询的参数语法
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