为了账号安全,请及时绑定邮箱和手机立即绑定

关于oracle 函数,解释变量的使用和调用,不是很明白,求解释~

关于oracle 函数,解释变量的使用和调用,不是很明白,求解释~

交互式爱情 2021-11-19 15:11:29
v_num,v_sum 尤其是这两个变量怎么来的啊函数CREATE OR REPLACEFUNCTION get_salary(Dept_no NUMBER,Emp_count OUT NUMBER)RETURN NUMBER ISV_sum NUMBER;BEGINSELECT SUM(SALARY), count(*) INTO V_sum, emp_countFROM EMPLOYEES WHERE DEPARTMENT_ID=dept_no;RETURN v_sum;EXCEPTIONWHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END get_salary;调用DECLAREV_num NUMBER;V_sum NUMBER;BEGINV_sum :=get_salary(10, v_num);DBMS_OUTPUT.PUT_LINE('部门号为:10的工资总和:'||v_sum||',人数为:'||v_num);END;
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

CREATE OR REPLACE
FUNCTION get_salary(//函数
Dept_no NUMBER,//输入参数
Emp_count OUT NUMBER)//输出参数
RETURN NUMBER //返回参数
IS
V_sum NUMBER;//这是声明函数的局部变量
BEGIN
SELECT SUM(SALARY), count(*) INTO V_sum, emp_count//这里用到形参,emp_count是output类型的参数,会返回
FROM EMPLOYEES WHERE DEPARTMENT_ID=dept_no;
RETURN v_sum;//返回v_sum的值
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END get_salary;
调用
DECLARE//这里是调用时声明变量
V_num NUMBER;
V_sum NUMBER;
BEGIN
V_sum :=get_salary(10, v_num);//v_num,v_sum这两个变量调用函数得到值,v_num是emp_count得到的值,v_sum是函数里return的v_sum的值
DBMS_OUTPUT.PUT_LINE('部门号为:10的工资总和:'||v_sum||',人数为:'||v_num);
END;



查看完整回答
反对 回复 2021-11-23
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

declare 是定义的关键字,说明下面的部分是定义部分,一直到begin结束,begin到end之间是代码段。
v_sum,v_num 是变量名,被声明为number类型。
函数get_salary()声明了两个变量,一个返回值。
oracle的参数有两种属性,in,out。一般默认为in,就是传值的,out类型可以理解为c里面的形参,传地址一类的,声明为OUT属性的参数,可以把函数对参数的修改带出来。
比如下面:
CREATE OR REPLACE
FUNCTION test(
v_var1 NUMBER,
v_var2 OUT NUMBER)
RETURN NUMBER IS
v_var1:=v_var1+1;
v_var2:=v_var2+1;
return v_var1;
调用
DECLARE
v_var1 NUMBER;
v_var2 NUMBER;
v_var3 NUMBER;
BEGIN
v_var1:=1;
v_var2:=1;
v_var3 :=test(v_var1, v_var2);
DBMS_OUTPUT.PUT_LINE('v_var1='||v_var1||'\nv_var2='||v_var2||'\nv_var3='||v_var3);
END;
那么输出应该是
v_var1=1
v_var2=2
v_var3=2
理解了out的含义,再看你的代码就容易了
因为函数申明emp_count为out,所以他将带出在函数中的变化。
函数里有select count(*) into emp_count from .........样子的语句。所以函数执行完成后这个变量的值其实是该部门的人数。




查看完整回答
反对 回复 2021-11-23
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

call GetPY(@str varchar(500)) 就可以了
sql2005中是exec GetPY(@str varchar(500)) 。

查看完整回答
反对 回复 2021-11-23
  • 3 回答
  • 0 关注
  • 433 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信