甚至当写实体对象代码的时候,你可能需要调用plsql函数和过程。 注意:不要使用JDBC执行简单的sql语句。总是利用视图对象实现这样的目的。如何可以,声明性的定义这些视图对象。 通常,都是在实体对象或者AM中调用存储过程,你需要:
- 使用PLSQL块创建JDBC调用语句;
- 绑定变量;
- 执行语句;
- 选择性获取的任何过程输出值;
- 关闭语句; 下面的列子展示了AM模块如何在实体对象中创建调用语句;
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.sql.Types;
...
OADBTransaction txn = getDBTransaction();
CallableStatement cs = txn.createCallableStatement("begin dbms_application_info.set_module(:1, :2); end;");
try
{
cs.setString(1, module);
cs.setString(2, action);
cs.execute();
cs.close();
}
catch (SQLException sqle)
{
try { cs.close } catch (Exception(e) {}
throw OAException.wrapperException(sqle);
}
下面的例子描述输出值:
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.sql.Types;
import oracle.jdbc.driver.OracleCallableStatement;
...
DBTransaction txn = getDBTransaction();
String sql = "BEGIN :1 := FND_MESSAGE.GET; END;";
CallableStatement cs = txn.createCallableStatement(sql, 1);
String messageBuffer = "";
try
{
((OracleCallableStatement)cs.registerOutParameter(1, Types.VARCHAR, 0, 2000);
cs.execute();
messageBuffer = cs.getString(1);
cs.close();
}
catch (SQLException sqle)
{
try { cs.close } catch (Exception(e) {}
throw OAException.wrapperException(sqle);
}