728x90
반응형
postgresql function 을 개발하고 실행하게 되면 function 내에서 raise 명령어를 이용하여 파라미터값 검증, 특정 데이터의 건수조회를 출력하게 될 것이다.
function 실행시 pglog 를 확인하는 방법이 있지만 터미널로 접속 후 일일히 로깅을 확인하여야 한다. (불편하다.;;;)
자바에서는 postgresql function 을 실행할때 SQLWarning(JDBC) 클래스를 사용하여 raise notice 의 문구를 가져올 수가 있다.
개발/실행환경
- Postgresql 13.x / dbeaver
- JDK 11 / Eclipse
1. 테스트용 function 개발
create or replace function public.fn_sqlwarning_test(p_count integer)
returns integer as
$$
declare
v_type_cd varchar := 'ABC001';
BEGIN
-- 파라미터 출력
raise debug 'RAISE 1 - p_count : %', p_count;
raise log 'RAISE 2 - p_count : %', p_count;
raise info 'RAISE 3 - p_count : %', p_count;
raise notice 'RAISE 4- p_count : %', p_count;
raise warning 'RAISE 5- p_count : %', p_count;
-- 변수출력
raise notice 'v_typ_cd : %', v_type_cd;
raise notice 'timestamp : %, version : %', current_timestamp, version();
return p_count;
END;
$$
LANGUAGE plpgsql
public.fn_sqlwarning_test(<입력값>) - 입력값을 반환해 주는 function
2. function 실행
select public.fn_sqlwarning_test(1) as return_val;
select public.fn_sqlwarning_test(2) as return_val;
3. Postgresql Function 실행하는 JAVA 소스 개발 후 실행
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLWarning;
import org.postgresql.Driver;
/**
* Postgresql Function 실행시 raise 실행문구 가져오기
*/
public class RaiseNoticeTest {
public void execution() throws Exception{
System.out.println(">>> Start >>>");
Connection con = null;
PreparedStatement pre = null;
ResultSet rs = null;
try {
// Postgresql JDB Driver 정보 출력
System.out.println("Driver Version : " + Driver.getVersion());
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://192.168.2.165:5432/postgres";
String user = "postgres";
String password = "<암호>";
String sql = "select public.fn_sqlwarning_test(?) as return_val";
con = DriverManager.getConnection(url, user, password);
pre = con.prepareStatement(sql);
pre.setInt(1, 2021);
rs = pre.executeQuery();
System.out.println("");
System.out.println("ResultSet");
if(rs.next()) {
System.out.println(rs.getInt(1));
}
System.out.println("");
System.out.println("SQLWarning");
SQLWarning sqlWarning = pre.getWarnings();
while(sqlWarning != null) {
String sqlState = sqlWarning.getSQLState();
String message = sqlWarning.getMessage();
System.out.println("SQLState : " + sqlState + ", Message : " + message);
sqlWarning = sqlWarning.getNextWarning();
}
}catch(Exception e) {
e.printStackTrace();
}finally {
if(rs != null) rs.close();
if(pre != null) pre.close();
if(con != null) con.close();
System.out.println("<<< End <<<");
}
}
public static void main(String[] args) throws Exception {
RaiseNoticeTest raiseNoticeTest = new RaiseNoticeTest();
raiseNoticeTest.execution();
}
}
Postgresql Function 의 raise 문구 출력을 확인 할 수 있을 것이다.
raise debug, raise log 가 출력되지 않은 이유는 postgresql 의 로그 레벨 설정이 INFO 이상으로 설정되어 있기 때문이다.
raise 관련된 Postgresql 공식 사이트를 확인해보자.
www.postgresql.org/docs/13/plpgsql-errors-and-messages.html
728x90
반응형
'개발 > Java' 카테고리의 다른 글
Base64.encodeBase64String 메서드 - Gradle 빌드에러 (0) | 2022.01.28 |
---|---|
Apache Log4j 취약점 발견(CVE-2021-44228) (0) | 2021.12.16 |
윈도우 cmd로 자바프로그램 실행시 경고메세지 발생-Unable to get Charset 'cp65001' for property 'sun.stdout.encoding' (0) | 2021.08.23 |
Maven을 이용한 JAVA 프로젝트 생성하기(Eclipse/STS) (0) | 2021.03.21 |
openjdk 1.8 설치하기(Redhat 6.9) (0) | 2020.12.17 |