当然不能这样写啦      CURSOR GET_ANTENNA_TYPE(v_baseid) IS
select NAME
        from RS_WIRELESS_ANTENNA_TYPE
       where ID IN (SELECT ANTENNA_TYPE_ID from RS_WIRELESS_ANTENNA WHERE BASE_ID=v_baseId);for GET_ANTENNA_TYPE_CUR (baseid) in ....
就可以了!

解决方案 »

  1.   

    select NAME
            from RS_WIRELESS_ANTENNA_TYPE
           where ID IN (SELECT ANTENNA_TYPE_ID from RS_WIRELESS_ANTENNA WHERE BASE_ID=baseId);
    最后这个baseId输入了根本就没有作用,怎么回事呀?
      

  2.   

    现在报下面这个错了,我知道应该很容易搞定,但是我以前一直写sybase,和sql_server的,所以这里还要劳架一下Compilation errors for FUNCTION EOMS.ANTENNA_TYPE_BY_BASEError: PLS-00103: 出现符号 ")"在需要下列之一时:
            in out <an identifier>
              <a double-quoted delimited-identifier> LONG_ double ref char
              time timestamp interval date binary national character nchar
    Line: 10
    Text: CURSOR GET_ANTENNA_TYPE(v_baseid) IS
      

  3.   

    忘记加类似了,你加一个varchar2就可以了!
    CURSOR GET_ANTENNA_TYPE(v_baseid varchar2) IS
    如果你的类似是字符型的话,其实的你就相应加上就是了!
      

  4.   

    改成这样了,还是取不出来值呀,编译是通过的。我快哭了
    CREATE OR REPLACE FUNCTION ANTENNA_TYPE_BY_BASE (
    baseId IN VARCHAR2
    ) RETURN VARCHAR2
    IS 
    ANTENNA_TYPE_STR VARCHAR(1000) := '';
    BEGINBEGIN
      DECLARE
          CURSOR GET_ANTENNA_TYPE(v_baseid varchar2) IS
    select NAME
            from RS_WIRELESS_ANTENNA_TYPE
           where ID IN (SELECT ANTENNA_TYPE_ID from RS_WIRELESS_ANTENNA WHERE BASE_ID=v_baseid);
      BEGIN
       FOR GET_ANTENNA_TYPE_CUR IN GET_ANTENNA_TYPE(baseId) LOOP
       IF ANTENNA_TYPE_STR IS NULL THEN
           ANTENNA_TYPE_STR := GET_ANTENNA_TYPE_CUR.NAME;
        ELSE
        ANTENNA_TYPE_STR := ANTENNA_TYPE_STR||'/'||GET_ANTENNA_TYPE_CUR.NAME;
        END IF;
        END LOOP;
      END;
    END;
    return ANTENNA_TYPE_STR;
    end ANTENNA_TYPE_BY_BASE;
      

  5.   

    CURSOR GET_ANTENNA_TYPE(v_baseid  varchar2 := 7) IS
    直接赋上值都不好用
      

  6.   

    BASE_ID=:v_baseid);
    加上冒号!
      

  7.   

    不是特别明白你的意思,但是我想下面的函数应该可以满足你的要求SQL> select * from rs_wireless_antenna_type;NAME               ID
    ---------- ----------
    aa                  1
    bb                  1
    cc                  2SQL> select * from rs_wireless_antenna;ANTENNA_TYPE_ID    BASE_ID
    --------------- ----------
                  1          1create or replace function my_test(baseid varchar2)return varchar2
    is 
    antenna_type_str varchar2(1000);
    str_name         rs_wireless_antenna_type.name%type;
    cursor get_antenna_type is select name
                               from rs_wireless_antenna_type
                               where id in (select antenna_type_id from rs_wireless_antenna where base_id=baseid);
    begin
      open get_antenna_type;
      loop
        fetch get_antenna_type into str_name;
        exit when get_antenna_type%notfound;
        antenna_type_str := antenna_type_str||'/'||str_name;
      end loop;
      close get_antenna_type;
    return antenna_type_str;
    end;
    /Function created.SQL> select my_test(1) from dual;MY_TEST(1)
    ----------------------------------
    /aa/bb