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

Jla*_*Jla 44 sql oracle plsql bind-variables

什么是:代表在查询?

INSERT INTO MyTable (ID) VALUES (:myId)
Run Code Online (Sandbox Code Playgroud)

它如何获取所需的值?

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

Jef*_*emp 57

":"在查询中代表什么?

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

它如何获取所需的值?

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

这个标志叫什么?

结肠.


OMG*_*ies 45

这在Oracle中称为绑定变量.

":"的名称是什么?

结肠.


Wil*_*den 6

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


小智 6

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

那意味着什么:SQL语法:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID
Run Code Online (Sandbox Code Playgroud)

与HQL语法相同:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.


Nat*_*ty 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;
Run Code Online (Sandbox Code Playgroud)

每次执行语句时,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;
Run Code Online (Sandbox Code Playgroud)

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


kgi*_*kis 5

它是一个命名参数.

在C#中,您在参数前面加上@(参见此处).

  • 这不是C#的功能.这是ADO.NET,它可以改变. (4认同)