我想创建一个存储过程输入一个Long型数据,返回一个字符串
具体想法如下
我想从表 a中查询根据输入的Long型数据
select a.f1||','||a.f2 as f4 from a where a.f3=输入的Long型数据
这个查询会产生多条记录,我想把这个把多条记录的结果拼成一个字符串返回
这个存储过程该怎么写啊,我从来没写过存储,对sql不熟悉希望大神们给个例子

解决方案 »

  1.   

    create or replace procedure proc(p_f3 in number, p_out out varchar2)
    is
       p_out := ' ';
    begin
       for i in (select a.f1||','||a.f2 as f4 from a where a.f3 = p_f3) loop
          p_out := p_out || i.f4;
       end loop;
    exception
       when others then
          raise;
    end proc;
      

  2.   

    噢,写错了,把p_out  := 那个要放到begin后面去,汗。
      

  3.   

    这个查询会产生多条记录,我想把这个把多条记录的结果拼成一个字符串返回
    用游标取出每条记录每个字段拼接起来就可以了
    游标使用
    DECALRE  
    CURSOR c_dept IS SELECT * FROM dept ORDER BY deptno;  
    CURSOR c_emp (p_dept VARACHAR2) IS  
      SELECT ename,salary  
      FROM emp  
      WHERE deptno=p_dept  
      ORDER BY ename  
    r_dept DEPT%ROWTYPE;  
    v_ename EMP.ENAME%TYPE;  
    v_salary EMP.SALARY%TYPE;  
    v_tot_salary EMP.SALARY%TYPE;  
    BEGIN  
      OPEN c_dept;  
         LOOP  
            FETCH c_dept INTO r_dept;  
            EXIT WHEN c_dept%NOTFOUND;  
            DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname);  
            v_tot_salary:=0;  
            OPEN c_emp(r_dept.deptno);  
                LOOP  
                   FETCH c_emp INTO v_ename,v_salary;  
                   EXIT WHEN c_emp%NOTFOUND;  
                   DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary);  
                   v_tot_salary:=v_tot_salary+v_salary;  
                END LOOP;  
            CLOSE c_emp;  
            DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary);  
         END LOOP;  
      CLOSE c_dept;  
    END;  游标FOR循环  
    在大多数时候我们在设计程序的时候都遵循下面的步骤:  
    1、打开游标  
    2、开始循环  
    3、从游标中取值  
    4、检查那一行被返回  
    5、处理  
    6、关闭循环  
    7、关闭游标
      

  4.   

    我也写个10g以上的
    create or replace procedure proc(p_f3 in long,p_out out varchar2)
    is
    begin
      select wm_concat(a.f1||','||a.f2) into p_out from a where f3=p_f3;
    exception
      when others then
      p_out:=null;
    end proc;