declare 
type my_cursor is ref cursor;--问题1地方
cur_demo1 my_cursor;
temp_sql varchar2(400);
temp_row hiway_demo%rowtype;
e_gender varchar2(2) := '1';begintemp_sql := temp_sql||'and gender='||''''||e_gender||'''';--问题2地方
   open cur_demo1 for 
       'select * from hiway_demo where 1 =1' ||temp_sql;
       
   loop 
    fetch cur_demo1 into temp_row ;
        exit when cur_demo1%notfound;
        dbms_output.put_line(temp_row.cname);
   end loop;
   close cur_demo1;
end;问题1:声明一个游标变量的时候为什么要先type my_cur is ref cursor;而直接这样写cursor my_cur;会报错。
问题2:能给我说下单引号是怎么配对的吗?

解决方案 »

  1.   

    1 cur_demo1   sys_refcursor;2 第一、第四单引号,是最外层表示引用值,也就是常见的引用作用
      由于单引号的特殊性,当单引号引用的数据里也含有单引号时,需要用2个单引号来转义,表示一个单引号字符值。
      

  2.   

    1。ref cursor,你使用的是动态游标,只有在运行的时候才能决定游标的内容.
       cursor my_cur定义的是静态游标。2。引号中的引号需要连续的两个引号
      

  3.   

    问题1:声明一个游标变量的时候为什么要先type my_cur is ref cursor;而直接这样写cursor my_cur;会报错。因为type my_cur is ref cursor只是定义了my_cur为游标类型,还没有定义游标。
    下面这句cur_demo1 my_cursor;是根据my_cur定义cur_demo1为my_cur类型的变量,而my_cur的类型为游标类型。
    cursor my_cur 直接定义了my_cur为游标类型。
    这叫好比java里的类与实例的关系。问题2:能给我说下单引号是怎么配对的吗?引号中的引号需要连续的两个引号
    temp_sql := temp_sql||'and gender='||''''||e_gender||'''';--问题2地方
    结果应为
    temp-ssql := temp_sql and gender = "e_gender";
      

  4.   

    在你实在搞不懂引号的情况下,建议使用chr(39)来代替引号。