今天修改别人以前写的函数
要求:是增加一个查询字段
函数结构如下 
create  or replace funciton 函数名
(i_id number
...
)
..
v_age number;
....
begin
sql:= 'select id,name from (from............................' ;
select  age into v_age   from t_user t where t.id=i_id;  ---这条语句我新增加的
open qq for 'select id,name,v_age age from ' ||'(select * from (' ||v_sql || .......'  ----,v_age age是我新增的  
return qq;
.....
exception
....
return -1
...end  函数名问题:我修改后查询不到数据,返回的是异常的值,open qq for 'select id,name,v_age age from 有问题,
希望高手帮忙看一下了,万分感谢!

解决方案 »

  1.   

    open qq for 'select id,name,v_age age from ' ||'(select * from (' ||v_sql || .......' 
    楼主把这条语句输出完整吧,不然不好分析初步判断,v_age是新增变量,写在select里, 那这张表是怎么可能有 v_age字段? 
      

  2.   

    'select id,name,v_age age from '
    这里
    'select id,name,'||v_age||'as  age from '试试
      

  3.   


    open qq for 'select id,name,v_age age from 
    --楼主的v_age不是你传递进来的参数吗?怎么跑到sql文中了,即使跑到sql也没问题,可是你这个写法就不对了吧?
    vsql := 'select id,name,' || to_char(v_age) || 'age from....'
    open qq for vsql
      

  4.   

    可以不用直接open for 字符串
    先将你的字符串放到一个变量
    用dbms_output 输出一下变量
    在test断点走一下函数,看输出内容就知道哪里错了.  
      

  5.   

    open qq for 'select id,name,v_age age from ' ||'(select * from (' ||v_sql || .......'改成
    open qq for 'select id,name,'||v_age||' age from ' ||'(select * from (' ||v_sql || .......'