---------->create table
create table Robert_test(id varchar2(30) primary key,test_value varchar(10))-----------> insert value
insert into Robert_test values('AA01','one')
/insert into Robert_test values('AA02','two')
/insert into Robert_test values('AA03','three')
/select *
from Robert_test
/ID                             TEST_VALUE
------------------------------ ----------
AA01                           one
AA02                           two
AA03                           three----------->create function
create or replace FUNCTION  Robert_test_fun(test_ID varchar2) return varchar2
  is
  all_data varchar2(30);
  begin
       select test_value into all_data
       from Robert_test
       where id not in (test_ID);
       return all_data;
  end;
/--------------------------->function test
select Robert_test_fun('AA01','AA02','AA03')
from dual
/ORA-06553: PLS-306: wrong number or types of arguments in call to 'ROBERT_TEST_FUN'--------------如何实现
select Robert_test_fun('AA01','AA02')
from dual
/ID                             TEST_VALUE
------------------------------ ----------
AA03                           three

解决方案 »

  1.   

    declare sqlstr varchar2(8000);
    begin
        sqlstr:='';
        sqlstr:=sqlstr||'select test_value into all_data ';
        sqlstr:=sqlstr||'from Robert_test ';
        sqlstr:=sqlstr||'where id not in ('|| test_ID ||')' ;
        
        execute immediate sqlstr;
    end;
      

  2.   

    直接写sql就好了,为什么要用函数实现呢。返回多个结果就会出错啊
      

  3.   

    select robert_test_fun(chr(39)||'AA01'||chr(39)||','||chr(39)||'AA02'||chr(39)||','||chr(39)||'AA03'||chr(39))
    from dual这个试试