后天就要踏上广州的征程了。今晚就献上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) {
}