我想创建一个存储过程输入一个Long型数据,返回一个字符串
具体想法如下
我想从表 a中查询根据输入的Long型数据
select a.f1||','||a.f2 as f4 from a where a.f3=输入的Long型数据
这个查询会产生多条记录,我想把这个把多条记录的结果拼成一个字符串返回
这个存储过程该怎么写啊,我从来没写过存储,对sql不熟悉希望大神们给个例子
具体想法如下
我想从表 a中查询根据输入的Long型数据
select a.f1||','||a.f2 as f4 from a where a.f3=输入的Long型数据
这个查询会产生多条记录,我想把这个把多条记录的结果拼成一个字符串返回
这个存储过程该怎么写啊,我从来没写过存储,对sql不熟悉希望大神们给个例子
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;
用游标取出每条记录每个字段拼接起来就可以了
游标使用
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、关闭游标
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;