需要使用绑定变量,碰到一个貌似简单的问题。请高手指教!
举个简单的例子说明以下问题!
一张表student
序号    编号      姓名     日期                年龄
210 20 NAME10 2012/3/29 16:26:06   22
209 19 NAME9 2012/3/29 16:26:06   21
208 18 NAME8 2012/3/29 16:26:06   20
207 17 NAME7 2012/3/29 16:26:06  19
206 16 NAME6 2012/3/29 16:26:06   18
205 15 NAME5 2012/3/29 16:26:06   17
204 14 NAME4 2012/3/29 16:26:06   16
203 13 NAME3 2012/3/29 16:26:06   15
202 12 NAME2 2012/3/29 16:26:06  14
201 11 NAME1 2012/3/29 16:26:06  13
--
DECLARE v_age INT :=20;
BEGIN
SELECT * FROM student s WHERE s.sname LIKE '%NAME%' AND s.sage>:v_age;
END;
--
执行报错说是“并非所有变量都已绑定”,请问要是在MS-SQL里这样的逻辑很好理解,也可执行。
在Oracle怎么使绑定变量和其他筛选条件一起执行?

解决方案 »

  1.   

    赋值 v_age INT :=20
    s.sage>:v_age这个是?  s.sage>=v_age?
      

  2.   

    筛选条件年龄大于20,我想在SQL查询语句中使用v_age这个变量,这样写对吗?
      

  3.   

    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as scottSQL> set timing on;
     
    Executed in 0.468 seconds
     
    SQL> create table test(id varchar2(8)); 
     
    Table created
     
    Executed in 0 seconds
     
    SQL> 
    SQL> declare
      2   s varchar2(300);
      3   begin
      4   for i in 1..100000 loop
      5   s:='insert into test (id) values('||i||')';
      6   execute immediate s;
      7   end loop;
      8  end;
      9  /
      
     
    PL/SQL procedure successfully completed
     
    Executed in 84.516 seconds
     
    SQL> 
    SQL> declare
      2   s varchar2(300);
      3   begin
      4   for i in 1..100000 loop
      5   s:='insert into test (id) values(:1)';
      6   execute immediate s using i;
      7   end loop;
      8  end;
      9  /
      
     
    PL/SQL procedure successfully completed
     
    Executed in 3.141 seconds
     
    SQL> 
      

  4.   

    你写的方法我明白,我现在问的是怎么才能直接在SQL里使用变量,而不需要将SQL字符串后EXEC。
      

  5.   

    比如说在微软的MS-SQL里这么写的语句
    DECLARE @v_age INT ;
    SET @v_age=20;
    SELECT *FROM student s WHERE s.sname LIKE '%NAME%' AND s.sage>@v_age;在Oracle里应该怎么写?
      

  6.   

    DECLARE @v_age number;
    SET @v_age:=20;
    SELECT *FROM student s WHERE s.sname LIKE '%NAME%' AND s.sage>@v_age;
      

  7.   

    不对,Oracle里不能用@开头表示变量。SET赋值也不对!
      

  8.   

    除了绑定变量,你的select在plsql块中也不能这么写的,会有错,