PL/SQL函数

后天就要踏上广州的征程了。今晚就献上FUNCTION

在Oracle中函数与存储过程非常相似。

存储过程:输入参数,输出参数,或者二者皆可的参数,没有返回值

函数:输入参数,有返回值

函数的一般的格式:

CREATE OR REPLACE FUNCTUION funcion_name [参数表列]
  RETURN DATATYPE
  IS|AS
  PL/SQL BLOCK

举例应用:

CREATE OR REPLACE FUNCTION get_age(per_id in person_id)
   return number
 is
   v_age person.id%type :=0;
 begin
   select age
   into V_age
   from person
   where id=per_id;
   return v_age;
 end get_age;
 /

在java代码里去调用函数:

CallableStatementcs;

try{

//调用一个没有参数的函数;函数返回aint

//预处理callable语句

  cs = connection.prepareCall("{? = call get_age}");
  // 注册返回值类型
  cs.registerOutParameter(1, i);
  // Execute and retrieve the returned value
  cs.execute();
  int retValue = cs.getInt(1);

//调用有一个in参数的函数;thefunctionreturnsanumber

 
 cs = connection.prepareCall("{? = call get_age(?)}");
  // Register the type of the return value
  cs.registerOutParameter(1, Types.number);
  // Set the value for the IN parameter
  cs.setInt(2, 95001);
  // Execute and retrieve the returned value
  cs.execute();
  retValue = cs.getInt(1);
  

//调用有一个out参数的函数;thefunctionreturnsaVARCHAR

cs=connection.prepareCall("{?=callget_age(?)}");

//RegisterthetypesofthereturnvalueandOUTparameter

cs.registerOutParameter(1,Types.VARCHAR);

cs.registerOutParameter(2,Types.VARCHAR);

//Executeandretrievethereturnedvalues

cs.execute();

retValue=cs.getString(1);     //returnvalue

StringoutParam=cs.getString(2);  //OUTparameter

//调用有一个in/out参数的函数;thefunctionreturnsaVARCHAR

  
cs = connection.prepareCall("{? = call get_age(?)}");
  // Register the types of the return value and OUT parameter
  cs.registerOutParameter(1, Types.NUMBER);
  cs.registerOutParameter(2, Types.NUMBER);
  

//SetthevaluefortheIN/OUTparameter

  cs.setInt(2, 95002);
  
  // Execute and retrieve the returned values
  cs.execute();
  retValue = cs.getInt(1);      // return value
  outParam = cs.getInt(2);      // IN/OUT parameter
  } catch (SQLException e) {
  }

相关推荐