ORACLE绑定变量初解

24 篇文章 0 订阅

1、

SQL> var i number
SQL> exec :i := 7369;

PL/SQL procedure successfully completed.

SQL> select * from emp where empno=:i;    

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20

SQL> exec :i :=7788;

PL/SQL procedure successfully completed.

SQL> select * from emp where empno=:i;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20


SQL> select sql_text,parse_calls from v$sql where sql_text like 'select * from emp where empno=%';

SQL_TEXT                                                       PARSE_CALLS
select * from emp where empno=:i                 2

作用是可以避免硬解析。



QL> define b=7876
SQL> select * from emp where empno=&b;
old   1: select * from emp where empno=&b
new   1: select * from emp where empno=7876

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

SQL> select * from emp where empno=&&b;
old   1: select * from emp where empno=&&b
new   1: select * from emp where empno=7876

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

SQL>
SQL> select sql_text,parse_calls from v$sql where sql_text like 'select * from emp where empno=%';

SQL_TEXT                                                       PARSE_CALLS
select * from emp where empno=7876        2

动态sql的绑定


SQL> set serveroutput on  
SQL> declare  
   2   v_string varchar2(100);  
   3   v_id tt.id%type ;  
   4   v_name tt.name%type ;  
   5   begin  
   6   v_string:='select * from tt where id=:v_id';  
   7   execute immediate v_string into v_id , v_name using &a;  
   8   dbms_output.put_line(v_id||' '||v_name) ;  
   9   end;  
10   /  
输入 a 的值:   1  
原值 7: execute immediate v_string into v_id , v_name using &a;  
新值 7: execute immediate v_string into v_id , v_name using 1;  
1 test  
 
PL/SQL 过程已成功完成。  
 
SQL> declare  
   2   v_string varchar2(100);  
   3   v_id tt.id%type;  
   4   v_name tt.name%type ;  
   5   begin  
   6   v_string:='insert into tt values(:id,:name)';  
   7   execute immediate v_string using &id,&name ;  
   8   end;  
   9   /  
输入 id 的值:   1000  
输入 name 的值:   'test'  
原值 7: execute immediate v_string using &id,&name ;  
新值 7: execute immediate v_string using 1000,'test' ;  
 
PL/SQL 过程已成功完成。  
 
SQL> select * from tt where id=1000;  
 
       ID NAME  
---------- ----------  
   1000 test 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle绑定变量是一种在SQL语句中使用的特殊语法,用于将变量SQL语句中的参数进行绑定。通过使用绑定变量,可以提高SQL语句的执行效率和安全性。 在Oracle中,绑定变量使用冒号(:)作为前缀,并且在SQL语句中使用该变量的地方都需要加上冒号前缀。绑定变量可以在SQL语句执行之前进行赋值,并且可以多次重复使用。 绑定变量的主要优点有: 1. 提高性能:使用绑定变量可以减少SQL语句的解析时间,因为Oracle数据库可以缓存已解析的SQL语句和执行计划,重复使用绑定变量可以直接使用缓存中的执行计划,避免了每次都重新解析SQL语句。 2. 防止SQL注入攻击:通过使用绑定变量,可以将用户输入的数据作为参数传递给SQL语句,而不是将其直接拼接到SQL语句中。这样可以有效防止SQL注入攻击。 3. 简化代码:使用绑定变量可以减少代码量,避免了手动拼接SQL语句的麻烦。 下面是一个使用绑定变量的示例: ```sql DECLARE v_employee_id NUMBER := 100; v_employee_name VARCHAR2(100); BEGIN SELECT employee_name INTO v_employee_name FROM employees WHERE employee_id = :v_employee_id; DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name); END; ``` 在上面的示例中,使用了绑定变量:v_employee_id来代替SQL语句中的参数。在执行SQL语句之前,可以将v_employee_id赋值为具体的值,然后执行SQL语句,获取结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值