我想在oracle定义一个简单的方法,它有一个参数,fun(a)
有一个sql语句:select * from task where employee_id=a;(结果可以多行)
我想通过那个fun函数调用这个SQL语句,把fun(a)放在oracle里, 运行能得到结果就行。有人肯帮个忙么?怎么写 谢谢了
Oracle文档我看了 没太看懂...

解决方案 »

  1.   

    这个比较麻烦,ORACLE的存储过程返回结果集比较麻烦,返回单个数据简单
      

  2.   

    有人会吗?我就想每次运行一个函数(定义参数a),他能调用 我定义的那个sql语句(参数a),得到结果就行
      

  3.   


    create or replace procedure fun(a integer) is
      type emp_type is table of emp%rowtype index by binary_integer;
      emp_t emp_type;
    begin
      select * into emp_t(1) from emp where empno = a;
      dbms_output.put_line('EMPNO   ENAME   JOB   MGR  HIREDATE   SAL  COMM  DEPTNO');
      dbms_output.put_line(emp_t(1).empno || '   ' || emp_t(1)
                           .ename || '   ' || emp_t(1).job || '   ' || emp_t(1)
                           .mgr || '   ' || emp_t(1)
                           .hiredate || '   ' || emp_t(1)
                           .sal || '   ' || emp_t(1).deptno);
    end;
    SQL> set serveroutput on;
    SQL> exec fun(7499);EMPNO   ENAME   JOB   MGR  HIREDATE   SAL  COMM  DEPTNO
    7499   ALLEN   SALESMAN   7698   20-2Ô -81   1600   30PL/SQL procedure successfully completed
      

  4.   

    定义一个包,然后再在包中定义一个游标。
    CREATE OR REPLACE PACKAGE PKG_name IS
     TYPE RPT_CURSOR IS REF CURSOR;
       PROCEDURE P_GET(a           IN VARCHAR2, 
                                  C_CURSOR  OUT RPT_CURSOR); --游标
    END PKG_UNDERPIT;CREATE OR REPLACE PACKAGE BODY PKG_name IS
       PROCEDURE P_GET(a in varchar2
                                C_CURSOR OUT RPT_CURSOR)AS
      BEGIN
        OPEN C_CJCGZL_JXZY FOR select * from task where employee_id=a;
      END P_GET;
    END PKG_name;这样就可以返回结果集了!
      

  5.   

    定义一个包,然后再在包中定义一个游标。 
    CREATE OR REPLACE PACKAGE PKG_name IS 
    TYPE RPT_CURSOR IS REF CURSOR; 
      PROCEDURE P_GET(a          IN VARCHAR2, 
                                  C_CURSOR  OUT RPT_CURSOR); --游标 
    END PKG_UNDERPIT; CREATE OR REPLACE PACKAGE BODY PKG_name IS 
      PROCEDURE P_GET(a in varchar2 
                                C_CURSOR OUT RPT_CURSOR)AS 
      BEGIN 
        OPEN C_CURSOR  FOR select * from task where employee_id=a; 
      END P_GET; 
    END PKG_name; 这样就可以返回结果集了!
      

  6.   

    可以考虑直接跑SQL返回结果集,是不是需要在FUNCTION中进行什么处理?
      

  7.   

    就是想把每次运算方便些, 设置一个参数在里面 以后每次跑sql就方便了,但是我问题还没解决..