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代码里去调用函数:

  CallableStatement cs;
  try {
  // 调用一个没有参数的函数; 函数返回 a int
  // 预处理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参数的函数; the function returns a number
 
 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参数的函数; the function returns a VARCHAR
  cs = connection.prepareCall("{? = call get_age(?)}");
  // Register the types of the return value and OUT parameter
  cs.registerOutParameter(1, Types.VARCHAR);
  cs.registerOutParameter(2, Types.VARCHAR);
  
  // Execute and retrieve the returned values
  cs.execute();
  retValue = cs.getString(1);      // return value
  String outParam = cs.getString(2);  // OUT parameter
  
  // 调用有一个in/out参数的函数; the function returns a VARCHAR
  
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);
  

  // Set the value for the IN/OUT parameter
  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) {
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值