I 주셔서 감사합니다 내가 올바르게 사용하고 있는지 확인하고 싶습니다 나는 많은 질문을 가지고 있지만 나는 플레이 프레임 워크와 JPA 내가 저장 프로 시저에 새로운 해요 어떻게 작성해야할지 모르겠다. 아마도 OnApplicationStart 메서드가 필요할 것입니다. 내 환경에서는 절차가 이미 마련되어 있습니다. Play를 사용하여 호출합니다. 저장 프로 시저를 호출하려면 Work
인터페이스를 살펴 봐야합니다. 이를 구현하면 데이터베이스에서 명령문을 실행할 수 있습니다. 이 클래스를 확장 super()
를 통해 생성자에 이름과 매개 변수를 전달할 수 있습니다 각각의 특정 저장 프로 시저를 들어
public class CallOracleProcedure implements Work {
private String anonymousPLSQL;
private String[] parameters;
public CallOracleProcedure(String anonymousPLSQL, String[] parameters) {
this.anonymousPLSQL = anonymousPLSQL;
this.parameters = parameters.clone();
}
/**
* Create a JDBC PreparedStatement and then execute the anonymous
* PL/SQL procedure.
*/
@Override
public void execute(Connection connection) {
PreparedStatement statement = null;
try {
statement = connection.prepareStatement("begin " + anonymousPLSQL + "; end;");
if (parameters != null) {
int i = 1;
for (String param : parameters) {
statement.setString(i++, param);
}
}
statement.executeUpdate();
} catch (SQLException e) {
Logger.error("Error performing anonymous pl/sql statement: '%s', with parameters: '%s' - catched error '%s'", anonymousPLSQL, parameters, e);
} finally {
if (statement != null) {
try {
statement.close();
} catch (Exception e) {
Logger.error("Error closing statement: %s", e);
}
}
}
}
}
:
public class StoredProcedureCall extends CallOracleProcedure {
public StoredProcedureCall(String param) {
super("package.storedprocedure(?)", new String[] { orgname });
}
}
을에서
우리는 기본 OracleProcedure 클래스를 만들었습니다 코드를 다음과 같이 호출 할 수 있습니다.
StoredProcedureCall procedure = new StoredProcedureCall("your parameter");
session.doWork(procedure);
당신은 execute()
방법에 CallableStatement
을 사용할 수있는 프로 시저를 호출하고 반환 값을 검색해야하는 경우 :
public class ProcedureWithReturnValue implements Work {
private final String parameter;
private String returnValue = null;
public ProcedureWithReturnValue (final String parameter) {
this.parameter = parameter;
}
@Override
public void execute(Connection connection) {
CallableStatement statement = null;
try {
statement = connection.prepareCall("begin ? := package.procedure(?); end;");
statement.registerOutParameter(1, OracleTypes.VARCHAR);
statement.setString(2, parameter);
statement.execute();
returnValue = statement.getString(1);
} catch (SQLException e) {
Logger.error("Error getting return value - catched error '%s'", e);
}
}
public String getReturnValue() {
return returnValue;
}
}
감사합니다. 그리고 프로 시저에서 SELECT 쿼리의 결과를 어떻게 검색 할 수 있는지 알고 있습니까? –
값을 반환하는 다른 예제를 추가했습니다. 그게 당신이 의미 한 바 였으면 좋겠어요. – evandongen
이 답변을 제공해 주셔서 감사합니다. 예제가 여러 결과를 반환하는 SELECT로 작동합니까? –