日期:2014-05-17  浏览次数:20968 次

存储过程如何调用函数给变量赋值?
create or replace function CalculategWorkIntensity( v_vehicleno in varchar2,v_gouzhong in number,
p_date_begin in date,
p_date_end in date)return number is
  v_q1 number;
  v_q2 number;
  v_q3 number;
  v_q4 number;
  v_q5 number;
  v_q6 number;
  v_q7 number;

 begin

 end CalculategWorkIntensity;


我要在存储过程中调用该函数,并且给几个变量赋值,怎么不能用如下语句

  select CalculategWorkIntensity() into q1,q2,q3,q4,q5,q6,q7 他怎么提示说参数过多呀?
应该怎么做呀?

------解决方案--------------------
你的函数返回只有一个值。。
------解决方案--------------------
应该是select CalculategWorkIntensity(q1,q2,q3,q4) from dual ,返回的数据就是v_q1,v_q2,v_q3,v_ q4,v_q5,v_q6,v_q7
------解决方案--------------------
SQL code

--你的函数一共是4个参数,而返回是一个数值型的值,按如下这种调用
declare 
    v_n number;
begin
    v_n := CalculategWorkIntensity(参数1,参数2,参数3,参数4);
--或 select CalculategWorkIntensity(参数1,参数2,参数3,参数4) into v_n from dual;
    dbms_output.put_line(v_n);
end;
/

------解决方案--------------------
函数返回值只能有1个。如果你需要达到返回多个的效果,可以用输出参数。

create or replace function CalculategWorkIntensity( v_vehicleno in varchar2,v_gouzhong in number,
p_date_begin in date,
p_date_end in date,
p_q1 out number,
p_q2 out number,
p_q3 out number,
p_q4 out number
)
------解决方案--------------------
如果想返回的是多个参数就该用下面的代码
SQL code

create or replace function CalculategWorkIntensity( v_vehicleno in varchar2,v_gouzhong in number,
p_date_begin in date,
p_date_end in date,
  
  v_q2 out number,
  v_q3 out number,
  v_q4 out number,
  v_q5 out number,
  v_q6 out number,
  v_q7 out number
)
 begin

 end CalculategWorkIntensity;

调用就用三楼的就行了。