자바에서 pl/sql 함수를 호출하시겠습니까?
그래서 예약 테이블에 몇 개의 취소가 있는지 확인하는 기능이 있습니다.
CREATE OR REPLACE FUNCTION total_cancellations
RETURN number IS
t_canc number := 0;
BEGIN
SELECT count(*) into t_canc
FROM booking where status = 'CANCELLED';
RETURN t_canc;
END;
/
sql에서 his를 실행하려면 다음을 사용합니다.
set serveroutput on
DECLARE
c number;
BEGIN
c := total_cancellations();
dbms_output.put_line('Total no. of Cancellations: ' || c);
END;
/
결과는 다음과 같습니다.
anonymous block completed
Total no. of Cancellations: 1
제 질문은 자바로 함수를 호출하는 것을 도와줄 수 있나요? 시도해 보았지만 운이 없었습니다.
Java는 이러한 목적을 제공합니다.
CallableStatement cstmt = conn.prepareCall("{? = CALL total_cancellations()}");
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.setInt(2, acctNo);
cstmt.executeUpdate();
int cancel= cstmt.getInt(1);
System.out.print("Cancellation is "+cancel);
가 PL/sql에서와 동일하게 인쇄됩니다.문서에 의하면,
데이터베이스 저장 프로시저 호출을 위한 호출 가능 상태 개체를 만듭니다.CallableStatement 개체는 IN 및 OUT 매개변수를 설정하는 방법과 저장 프로시저에 대한 호출을 실행하는 방법을 제공합니다.
함수에 대한 매개 변수를 전달할 수도 있습니다. ex,
conn.prepareCall("{? = CALL total_cancellations(?)}");
cstmt.setInt(2, value);
값을 입력 매개 변수로 함수에 전달합니다.
도움이 되길 바랍니다!
호출 가능한 문장 준비
Oracle에서 사용하는 익숙한 블록 구문과 ANSI 92 표준 구문의 두 가지 형식이 있습니다.샘플 프로그램의 경우 블록 구문의 형태는 다음과 같습니다.
CallableStatement vStatement = vDatabaseConnection.prepareCall( "begin ? := javatest( ?, ? ); end;" );
ANSI 92 구문의 형태는 다음과 같습니다.
CallableStatement vStatement = vDatabaseConnection.prepareCall( "{ ? = call javatest( ?, ? )}");
아래 오류가 발생하면 첫 번째 형식을 사용하는 것이 좋습니다.
total_cancellation이 프로시저가 아니거나 정의되지 않은 오류입니다.
샘플코드.
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@xx.xxx.xx.xxx:1521:xxx", "user","pass");
CallableStatement cstmt = conn.prepareCall("begin ? := TEST_FUNC(?,?); end;");
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.setString(2, "Test");
cstmt.setInt(3, 1001);
cstmt.execute();
int result = cstmt.getInt(1);
System.out.print("Result: " + result);
cstmt.close();
conn.close();
언급URL : https://stackoverflow.com/questions/26550465/call-pl-sql-function-in-java
'source' 카테고리의 다른 글
Oracle: 데이터를 찾을 수 없는 경우에도 항상 하나의 행만 반환하는 쿼리를 가져옵니다. (0) | 2023.10.09 |
---|---|
PowerShell의 어레이에 요소를 동적으로 추가하려면 어떻게 해야 합니까? (0) | 2023.10.09 |
Android의 컨텍스트에서 작업 가져오기 (0) | 2023.10.09 |
MariaDB에서 동적 열 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.10.09 |
원격 세션에서 Powershell 로그오프 (0) | 2023.10.09 |