创建存储过程,使用OUT类型参数获得雇员经理名,怎么做,
发布网友
发布时间:2022-06-16 04:01
我来回答
共3个回答
热心网友
时间:2022-06-19 03:29
--一共两个想法,你看看哪个你喜欢
--第一个想法是传一个编号,返回一个值
--过程
create or replace procere wangsc_pro(
p_number in number,
p_name out varchar2
)
as
cursor cur_emp is
select m.ename from emp w join emp m on w.mgr=m.empno and w.empno=p_number;
begin
open cur_emp;
loop
fetch cur_emp into p_name;
exit when cur_emp%notfound;
end loop;
close cur_emp;
end;
--调用
declare
v_empno emp.empno%type:=7369;
v_ename emp.ename%type;
begin
wangsc_pro(v_empno,v_ename);
dbms_output.put_line('雇员:'||v_empno||'--经理:'||v_ename);
end;
--第二个想法是不传参数,返回记录集
--定义一个包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--过程
create or replace procere wangsc_pro(
p_cursor out testpackage.test_cursor
)
as
v_sql varchar2(1000);
begin
v_sql := 'select w.ename,m.ename from emp w join emp m on w.mgr=m.empno';
open p_cursor for v_sql;
end;
--调用
declare
v_wename emp.ename%type;
v_mename emp.ename%type;
pp_cursor testpackage.test_cursor;
begin
wangsc_pro(pp_cursor);
loop
fetch pp_cursor into v_wename,v_mename;
exit when pp_cursor%notfound;
dbms_output.put_line('雇员:'||v_wename||'-经理:'||v_mename);
end loop;
close pp_cursor;
end;
热心网友
时间:2022-06-19 03:29
--【练习2】创建存储过程,使用OUT类型参数获得雇员经理名
CREATE OR REPLACE PROCEDURE PRO_GET_MGR(E_NO IN NUMBER,M_NAME OUT VARCHAR2)
AS
BEGIN
SELECT M.ENAME INTO M_NAME FROM EMP E,EMP M WHERE M.EMPNO=E.MGR AND E.EMPNO=E_NO;
DBMS_OUTPUT.PUT_LINE('员工编号'||E_NO||'的经理名为:'||M_NAME);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('输出出现异常');
END;
DECLARE
M_NAME EMP.ENAME%TYPE;
BEGIN
PRO_GET_MGR('7369',M_NAME);
END;
下面的方法是根据ENAME员工名来查找
--【练习2】创建存储过程,使用OUT类型参数获得雇员经理名
CREATE OR REPLACE PROCEDURE PRO_GET_MGR(E_NAME VARCHAR2,M_NAME OUT VARCHAR2)
AS
BEGIN
SELECT M.ENAME INTO M_NAME FROM EMP E,EMP M WHERE M.EMPNO=E.MGR AND E.ENAME=E_NAME;
DBMS_OUTPUT.PUT_LINE('员工'||E_NAME||'的经理名为:'||M_NAME);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('输出出现异常');
END;
DECLARE
M_NAME EMP.ENAME%TYPE;
BEGIN
PRO_GET_MGR('SMITH',M_NAME);
END;
热心网友
时间:2022-06-19 03:30
直接给out 参数赋值就好,其它和另的存储过程没区别追问能把具体的代码写给我看下嘛?
我自己创建好了过程,但是执行时总是说存在重复值,麻烦各位给个具体代码?
这两张表示oracle中内置的两张表!