<Oracle>

DEFINE EX_CD = '1200'; -- 전시코드
DEFINE EX_YEAR = '2024'; -- 전시년도

INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD ,EX_CD ,EX_YEAR ,USER_SEQ ,INSERT_ID ,INSERT_IP) VALUES ('100', &EX_CD, &EX_YEAR, '2453', '2023014', '1.1.1.1');
INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD ,EX_CD ,EX_YEAR ,USER_SEQ ,INSERT_ID ,INSERT_IP) VALUES ('100', &EX_CD, &EX_YEAR, '2454', '2023014', '1.1.1.1');
INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD ,EX_CD ,EX_YEAR ,USER_SEQ ,INSERT_ID ,INSERT_IP) VALUES ('100', &EX_CD, &EX_YEAR, '2455', '2023014', '1.1.1.1');
INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD ,EX_CD ,EX_YEAR ,USER_SEQ ,INSERT_ID ,INSERT_IP) VALUES ('100', &EX_CD, &EX_YEAR, '2456', '2023014', '1.1.1.1');
SELECT EX_CD FROM TEX_YYEX_CD WHERE SITE_CD = '100' AND EX_YEAR = '2024'; -- 전시코드 '1200' 포함 2024년 등록된 모든 전시코드 조회
DECLARE
    CURSOR EX_CD_CURSOR IS -- TEX_YYEX_CD 테이블에서 SITE_CD가 '100'이고 EX_YEAR이 '2024'인 레코드를 조회하는 커서 EX_CD_CURSOR를 선언
        SELECT EX_CD
          FROM TEX_YYEX_CD
         WHERE SITE_CD = '100'
           AND EX_YEAR = '2024';

    V_EX_CD TEX_YYEX_CD.EX_CD%TYPE; -- 변수 V_EX_CD의 데이터 타입을 TEX_YYEX_CD 테이블의 EX_CD 컬럼과 동일하게 설정
BEGIN
    FOR EX_CD_RECORD IN EX_CD_CURSOR LOOP -- EX_CD_CURSOR 커서에서 조회된 EX_CD 값을 하나씩 반복하여 가져와 V_EX_CD 변수에 넣기
        V_EX_CD := EX_CD_RECORD.EX_CD;

        INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD, EX_CD, EX_YEAR, USER_SEQ, INSERT_ID, INSERT_IP) VALUES ('100', V_EX_CD, '2024', '2453', '2023014', '1.1.1.1'); -- V_EX_CD 변수 사용
        INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD, EX_CD, EX_YEAR, USER_SEQ, INSERT_ID, INSERT_IP) VALUES ('100', V_EX_CD, '2024', '2454', '2023014', '1.1.1.1'); -- V_EX_CD 변수 사용
        INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD, EX_CD, EX_YEAR, USER_SEQ, INSERT_ID, INSERT_IP) VALUES ('100', V_EX_CD, '2024', '2455', '2023014', '1.1.1.1'); -- V_EX_CD 변수 사용
        INSERT INTO TEX_YYEX_CRG_ETC (SITE_CD, EX_CD, EX_YEAR, USER_SEQ, INSERT_ID, INSERT_IP) VALUES ('100', V_EX_CD, '2024', '2456', '2023014', '1.1.1.1'); -- V_EX_CD 변수 사용
    END LOOP;
END;

Thymeleaf 문법의 기본적인 특징 : html 태그 안에 th 문법을 추가하는 형태

 

<태그 th:속성="표현식 및 서버로부터 받는 값"/>

 

th:text="${}"

 

th:href="@{}"

 

th:with="${}"

 

th:value="${}"

 

th:action="@{}"

 

th:object="${}"

 

th:field="*{}"

 

th:if="${}", th:unless="${}"

 

th:each="변수 : ${list}"

 

th:switch, th:case

 

<사용 예>

<script th:inline="javascript">
	/*<![CDATA[*/
	function fnThymeleafExample() {
		var thymeleafVar1 = /*[[${exampleVo.exampleVal1}]]*/;
		var thymeleafVar2 = /*[[${exampleVal2}]]*/;
	}
	/*]]>*/
</script>

<td th:text="${exampleVo.exampleVal1}"> </td>
<td th:text="${#numbers.formatInteger(exampleVal2, 0, 'COMMA')}"> </td>

<form id="exampleForm" th:object="${exampleForm}" th:method="POST">
	<input type="hidden" th:field="*{exampleVal3}" />
	<div th:if="${exampleDto.example1.example2 != '1' && exampleDto.example1.example2 != '2'}">
		<label class="text-danger"> * 예제 </label>
		<input type="text" th:field="*{exampleVal4}" th:maxlength="${exampleDto.example2}" class="form-control">
		<p> 최대길이 [[${exampleDto.example2}]]자 </p>
		<p class="text-linebreak" th:utext="${exampleDto.example3}"> 예제 </p>
	</div>
</form>

<Oracle>

WITH RANKED_ATTENDANCE AS (
	SELECT CUST_CD
	     , EX_YEAR
	     , ACT_EXHBT_YN
	     , ROW_NUMBER() OVER (PARTITION BY CUST_CD ORDER BY EX_YEAR DESC) AS RN
	  FROM TEX_YYEX_CUST_INFO
	 WHERE SITE_CD = '100'
	   AND EX_CD = '1000'
	   AND ACT_EXHBT_YN = 1
	 ORDER BY EX_YEAR DESC
),

RANKED_ATTENDANCE_SUB AS (
	SELECT A.CUST_CD
	     , B.COMP_NM
	     , A.EX_YEAR
	     , A.ACT_EXHBT_YN
	     , A.RN
	     , A.EX_YEAR + A.RN AS GROUP_YEAR
	  FROM RANKED_ATTENDANCE A
	     , TAC_CUST_INFO B
	 WHERE A.EX_YEAR + A.RN = TO_CHAR(SYSDATE, 'YYYY') + 1
	   AND A.EX_YEAR > TO_CHAR(SYSDATE, 'YYYY') - 5
	   AND A.CUST_CD = B.CUST_CD
	 ORDER BY A.CUST_CD, A.EX_YEAR
)

SELECT COMP_NM, MAX(RN) AS MAX_CNT
  FROM RANKED_ATTENDANCE_SUB
 GROUP BY COMP_NM

전시 코드 1000 전시회

작년까지 실제 참가 여부가 Y인 업체들의 과거 연속 참가 최대 카운트 조회

(작년 참가를 포함하여 최대 5년 연속 참가까지만 확인)

// Date 변수 date1 -> yyyyMMdd 문자열로 변환
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String strDate1 = sdf.format(date1);

// LocalDate 변수 date2 -> yyyyMMdd 문자열로 변환
String strDate2 = date2.format(DateTimeFormatter.ofPattern("yyyyMMdd"));

// LocalDateTime 변수 date3 -> yyyyMMdd 문자열로 변환
String strDate3 = date3.format(DateTimeFormatter.ofPattern("yyyyMMdd"));

 

'Java > 참고자료' 카테고리의 다른 글

[Java] javax.annotation.Resource 오류  (1) 2025.01.17
[Java] 특정 문자열 및 빈 값 체크  (0) 2024.08.29
[Java] Annotation  (0) 2023.08.15
[Java] Equals & HashCode  (0) 2022.11.25
[Java] Exception  (0) 2022.11.25

<MySQL>

-- MySQL의 경우 시간 비교를 위한 시간컬럼명이 필수로 존재해야 조회 가능
SELECT * FROM 테이블명 WHERE 시간컬럼명 >= DATE_ADD(NOW(), INTERVAL -10 SECOND); -- 10초 전 해당 테이블의 모든 데이터를 조회
SELECT * FROM 테이블명 WHERE 시간컬럼명 >= DATE_ADD(NOW(), INTERVAL -10 MINUTE); -- 10분 전 해당 테이블의 모든 데이터를 조회
SELECT * FROM 테이블명 WHERE 시간컬럼명 >= DATE_ADD(NOW(), INTERVAL -10 HOUR); -- 10시간 전 해당 테이블의 모든 데이터를 조회
SELECT * FROM 테이블명 WHERE 시간컬럼명 >= DATE_ADD(NOW(), INTERVAL -10 DAY); -- 10일 전 해당 테이블의 모든 데이터를 조회
-- WHERE 조건 추가 가능

 

<Oracle>

SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' SECOND) WHERE 1 = 1; -- 10초 전 해당 테이블의 모든 데이터를 조회
SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) WHERE 1 = 1; -- 10분 전 해당 테이블의 모든 데이터를 조회
SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' HOUR) WHERE 1 = 1; -- 10시간 전 해당 테이블의 모든 데이터를 조회
SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' DAY) WHERE 1 = 1; -- 10일 전 해당 테이블의 모든 데이터를 조회
-- WHERE 조건 추가 가능

 

'LSY' 카테고리의 다른 글

[LSY] 노래  (0) 2023.05.05
[LSY] 사진  (0) 2022.12.03
// Java 특정 문자열 및 빈 값 체크
String str1 = null; // str1 == null로 체크
String str2 = "A"; // "A".equals(str2)로 체크
String str3 = ""; // "".equals(str3)로 체크
// (Java 6 이상)
String str4 = ""; // str4.isEmpty()로 체크
String str5 = ""; // str5.trim().isEmpty()로 체크
String str6 = " "; // str6.trim().isEmpty()로 체크
String str7 = "          "; // str7.trim().isEmpty()로 체크
// (Java 11 이상)
String str8 = ""; // str8.isBlank()로 체크
String str9 = " "; // str9.isBlank()로 체크
String str10 = "          "; // str10.isBlank()로 체크

'Java > 참고자료' 카테고리의 다른 글

[Java] javax.annotation.Resource 오류  (1) 2025.01.17
[Java] Date & LocalDate & LocalDateTime 변수를 yyyyMMdd 문자열로 변환  (0) 2024.09.13
[Java] Annotation  (0) 2023.08.15
[Java] Equals & HashCode  (0) 2022.11.25
[Java] Exception  (0) 2022.11.25

Ajax 통신 시 로딩바를 구현하는 방법은 여러 많은 블로그에서 확인할 수 있다.

여기서는 submit이나 location.href와 같은 페이지 이동 시 로딩바를 구현하는 방법에 대해 알아보자

 

1. 로딩바 gif 파일 다운로드

loadingbar.gif

 

 

2. 프로젝트 이미지 폴더 안에 로딩바 gif 파일 넣기 (ex : img src='/images/loadingbar.gif')

 

 

3. script 태그 안 submit or location.href 전에 로딩바와 로딩 시 보여줄 배경 추가 후 보여주기

<script type="text/javascript">

	function save() {
		var backHeight = $(document).height(); // 로딩 시 보여줄 배경 높이
	   	var backWidth = window.document.body.clientWidth; // 로딩 시 보여줄 배경 너비
	   	var backGroundCover = "<div id='back'></div>";
	   	var loadingBarImage = "";
	   	loadingBarImage += "<div id='loadingBar'>";
		loadingBarImage += "     <img src='/images/loadingbar.gif' width='100' height='100'/>"; // 로딩바 이미지
		loadingBarImage += "</div>";
		$('body').append(backGroundCover).append(loadingBarImage);
		$('#back').css({ 'width':backWidth, 'height':backHeight, 'opacity':'0.3' });
		$('#back').show();
		$('#loadingBar').show();
		
		// 1. submit
		$('#saveForm').attr('method', 'POST');
		$('#saveForm').attr('action', '/save');
		$('#saveForm').submit();
		
		// 2. location.href
		var url = '/save'; 
		location.href = url;
	}
    
</script>

 

 

4. style 태그 안 코드 추가

<style type="text/css">

	#back {
		position:absolute;
		z-index:100;
		background-color:#000000;
		display:none;
		left:0;
		top:0;
	}
    
	#loadingBar { 
		position:absolute;
		left:50%;
		top:40%;
		display:none;
		z-index:200;
	}
    
</style>

 

 

Ajax 통신 시 complete 시점에서 아래 코드가 필요하지만 submit or location.href의 경우 페이지 이동에 의해

로딩바와 로딩 시 보여준 배경이 자동으로 숨김 및 제거된다.

$('#back, #loadingBar').hide();
$('#back, #loadingBar').remove();

 

+ Recent posts