source

자바에서 pl/sql 함수를 호출하시겠습니까?

ittop 2023. 10. 9. 23:32
반응형

자바에서 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

반응형