select object_name,object_type from dba_objects
where object_name like '%xxx%';要实现传入xxx作为参数,编写一函数实现select同样功能并返回结果集
可用select * from yyy(xxx);-----查询结果,这里xxx是参数,yyy是函数名

解决方案 »

  1.   

    select * from yyy(xxx)select object_name,object_type from dba_objects 
    where object_name like '%xxx%'; 这两个一样的...这样的函数有何用?
      

  2.   

    这个需求不太合适:
    1、如果外部程序来使用,没有必要写一个存储过程或者函数来返回一个结果集,外部程序直接写一个函数利用游标把符合要求的数据检索回来就行了;
    2、如果是存储过程中使用这个结果集,那么在存储过程中直接写select语句可以啊,也或者,写一个函数,每次返回一个结果,而不是结果集,更为实用。CREATE OR REPLACE FUNCTION get_type(p_name dba_objects.object_name%TYPE) RETURN dba_objects.object_name%type AS
      v_type dba_objects.object_type%TYPE;
    BEGIN
      select dba_objects.object_type into v_type
      from dba_objects 
      where dba_objects.object_name=p_name;
      return v_type;
    EXCEPTION
      WHEN OTHERS THEN
        return NULL;
    END get_type;
      

  3.   

    select * from yyy(xxx);
    为什么一定要这么调 ,你想让函数返回什么
      

  4.   

    不是外部程序用,也不是存储过程中用
    在sqlplus中用
    我试试
      

  5.   

    回3楼不能用=要用like的 因为会用通配符
      

  6.   

    实现你的功能,可以用到Pipe函数,搜索就知道了。
    至于调用的语句则要稍微修改一下。
    select * from table(yyy(xxx));
      

  7.   


    create or replace package PKG_PIPE_TEST is TYPE T_REC IS RECORD(
        TNAME VARCHAR2(30),
        TABTYPE VARCHAR2(10)
       );
     TYPE T_REC_ARR IS TABLE OF T_REC;
     
     FUNCTION F_TEST_PIPE(PNAME IN VARCHAR2) RETURN T_REC_ARR PIPELINED;end PKG_PIPE_TEST;
    create or replace package body PKG_PIPE_TEST isFUNCTION F_TEST_PIPE(PNAME IN VARCHAR2) RETURN T_REC_ARR PIPELINED
    IS
      VREC T_REC;
      R SYS_REFCURSOR;
    BEGIN
      open r for select tab.tname,tab.tabtype from tab where tname like  '%'||upper(Pname)||'%';
      fetch r into VREC;
      while r%found loop
        pipe row (VREC);
        fetch r into VREC;
      end loop;
      close r;
      return;
    END;end PKG_PIPE_TEST;
      

  8.   

    调用的时候可以这样:
     select * from table(pkg_pipe_test.F_TEST_PIPE('DeadOrLive'));需要注意的是,这种函数不应该使用在具有大量返回结果的查询,否则oracle内存压力大。
      

  9.   

    回 dobetterthatnthink
    不是生产库用,自己收集的小库用
    你的代码,我试试