728x90


출처: https://2dubbing.tistory.com/51 [비실이의 개발공간]

 

여러개의 row(record) 일괄 update 쿼리문

예시 테이블 명: TEST idx name age  1 GIM 25  2 LEE 27  3 PARK 30 위 테이블에서 idx가 1인 row의 컬럼 name 값을 KIM으로, idx가 3인 row의 컬럼 age 값을 29 로 변경 이 경우 아래와 같이 쿼리를 구성..

2dubbing.tistory.com

 

예시

 

테이블 명: TEST 

 

idx 

name 

age 

 1

GIM 

25 

 2

LEE 

27 

 3

PARK

30 

 

위 테이블에서 idx가 1인 row의 컬럼 name 값을 KIM으로, 

 

 

 

idx가 3인 row의 컬럼 age 값을 29 로 변경

 

 

 

이 경우 아래와 같이 쿼리를 구성하여 처리한다.

 

UPDATE  TEST
SET
  name = CASE idx WHEN 1 THEN 'KIM' ELSE name END,
  age = CASE idx WHEN 3 THEN 29 ELSE age END

WHERE  idx IN (1, 3);

 

4번째 라인을 보면 ELSE 구문이 있는데  이 쿼리를 해석해보면 아래와 같다.

 

 

`idx가 1인 row의 컬럼 name의 값을 'KIM' 으로 변경하고, idx가 1이 아닌 row의 컬럼 name은 이전 값을 유지`

 

 

만약 위 쿼리에서 ELSE 구문을 모두 지운 뒤에 쿼리를 수행하면 아래와 같이 바뀌게된다.

 

 

idx 

name 

age 

 1

KIM 

NULL 

 2

NULL 

NULL 

 3

NULL

29

 

728x90

'Dev > DB' 카테고리의 다른 글

Oracle - OVER() 함수 설명  (0) 2020.08.26
[MySQL] Linux 언어설정 변경 (LATIN 1 -> EUCKR)  (0) 2020.07.20
[MySQL] batch작업  (0) 2020.07.02
[MySQL/Oracle] Merge Into 관련 (ON DUPLICATE KEY)  (0) 2020.06.30
[MyBatis] Like 처리 방법  (0) 2020.06.30
728x90

 

I found a solution (thanks to user1506104) to changing the toolbar's title, which did not use getSupportActionBar().setTitle().

CollapsingToolbarLayout toolbarLayout = findViewById(R.id.toolbar_layout); 
Toolbar toolbar = findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

mViewModel.getValue().observe(this, mValue -> { 
	toolbarLayout.setTitle(mValue); });

Where R.id.toolbar_layout is the CollapsingToolbarLayout that parents R.id.toolbar in the activity's respective layout resource.

I do not know why it works unfortunately.

 

Reference

 

https://stackoverflow.com/questions/60467526/how-to-execute-settitle-for-an-actionbar-in-an-activitys-observe-call-for-a-v

 

 

How to execute setTitle() for an ActionBar in an activity's observe call for a ViewModel's LiveData object?

In an activity file, when I write getSupportActionBar().setTitle(...) in an instantiated observer interface for a view model's LiveData value, the action bar's title doesn't change on the observabl...

stackoverflow.com

 

 

728x90
728x90

Batch

배치(batch)란 일괄적으로 작업을 처리한다는 의미다. 예제에서 토픽 저장을 할 때마다 해당 작업을 처리하는 것이 아니라 이메일을 발송해야 한다는 사실만 일단 기록해두고, 실제 이메일 전송 작업은 백그라운드로 일괄적 처리할 것이다. 

 

 

---------------------------------------------------------------------------------------------------

 

 

1. MySQL SQL 배치 작업 (in Window)

출처: https://skshpapa80.tistory.com/27

 

리눅스에서는 cron 이라는 좋은툴이 있으니 넘어가고 윈도우에서 MySQL 배치 작업을 하는 방법을 소개합니다.

MySQL윈도우 버전을 설치하면 MySQL Command Line Tool이 같이 설치됩니다.

이툴을 사용하여 배치작업을 할예정인데요.

배치작업을 위해 두개의 파일이 필요합니다.

bat확장자를 가진 배치파일과 실행될 SQL 이저장된 파일

1. 우선 bat 파일을 하나 만듭니다.

텍스트 에디터에서 신규 파일을 생성한 후

ex) MYSQL_BATCH.bat 이런식으로 파일을 생성합니다.

그리고 다음과 같이 코딩합니다.

C:\PROGRA~1\MySQL\MYSQLS~1.1\bin\mysql.exe -u아이디 -p패스워드 < runsql.sql

(MySQL 설치위치는 설치환경에 따라 다를수 있습니다!)

bat 파일을 저장합니다.

2.두개의 파일은 같은 폴더에 있어야 합니다.

SQL 파일을 하나 만듭니다. ex) runsql.sql

신규로 텍스트파일을 하나 생성한 후

runsql.sql 파일로 저장하고

실행할 내용의 SQL 들을 정리해서 입력합니다.

여러줄을 입력할경우 SQL 문 마지막에 ; 를 입력합니다.

3.미리 작성한 sql문을 테스트 하고

runsql.sql 파일을 저장합니다.

4.MYSQL_BATCH.bat 실행

MYSQL_BATCH.bat 파일을 더블 클릭하여 정상적으로 실행되는지 테스트 합니다.

아이디와 비밀번호, 경로를 잘 확인해야 합니다.

5.마지막으로 윈도우 제어판에가서 예약을 설정합니다.

이때 처음작성한 bat 파일을 원하는시간에 동작하도록 설정하면

사용자가 원하는 시간에 실행되는

MySQL 배치작업이 완성됩니다.

이방법을 사용해서 MySQL 배치작업 스크립트를 많이 돌려 봤는데 잘 운영됩니다. ^^

 

 

2. Linux - cron 사용

Cron

크론은 유닉스 계열 (리눅스 포함)에 기본적으로 포함된 스케줄러다. 스케줄러라는 것은 정해진 시간에 어떤 작업을 수행하도록 하는 소프트웨어를 말한다. 특정 시간에 어떤 스크립트가 실행되도록 크론에 정의해두면 그 시간에 그 스크립트를 실행해준다. 이에 대한 자세한 설명은 리눅스 수업 크론편을 참고하자.

CLI 수업에서 만든 예제는 바로 크론을 이용하기 위한 것이다. 큐에 쌓여있는 작업을 하나씩 수행하도록 할 때 크론을 이용할 것이다. 이렇게 해야 할일을 순차적으로 쌓아놨다가 일괄적으로 처리하는 것을 배치(batch) 작업이라고 부른다. 

 

 

 

https://opentutorials.org/course/697/4130

blog.naver.com/todangs/220779628651

https://dalgoo.tistory.com/17

728x90
728x90

 

데이터가 있으면 수정, 없을 경우 삽입을 하는 쿼리를 짜려고 할 때,

- Oracle에서는  Merge into라는 기능이 존재

- MySQL에서는 On duplicate key를 쓰면 됨

 

 

--Oracle
MERGE INTO table_name alias
            USING (table | view | subquery) alias                -- 하나의 테이블만 이용한다면 DUAL 활용
                 ON (join condition)                                     -- WHERE절에 조건 쓰듯이
            WHEN MATCHED THEN                                   -- ON 이하의 조건에 해당하는 데이터가 있는 경우 
                     UPDATE SET col1 = val1[, ...]                -- UPDATE 실행
            WHEN NOT MATCHED THEN                           -- ON 이하의 조건에 해당하는 데이터가 없는 경우
                     INSERT (column lists) VALUES (values);  -- INSERT 실행

--MySQL

INSERT INTO
      dm.product_t02 (
         column_name_1,
         column_name_2,
         column_name_3
      )
   VALUES (
      value_1,
      value_2,
      value_3'     
   )
   ON
      DUPLICATE KEY
   UPDATE
      column_name_1=value_1,
      column_name_2=value_2,
      column_name_3=value_3;

 

Referencehttps://unabated.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-MERGE-INTO-%ED%95%9C%EB%B2%88%EC%97%90-INSERT-UPDATE-%ED%95%98%EA%B8%B0

unabated.tistory.com/entry/오라클-MERGE-INTO-한번에-INSERT-UPDATE-하기

http://pkban.blogspot.com/2019/11/mysql-merge-into.html

728x90

'Dev > DB' 카테고리의 다른 글

[MySQL] 다중 update 쿼리 방법  (0) 2020.07.07
[MySQL] batch작업  (0) 2020.07.02
[MyBatis] Like 처리 방법  (0) 2020.06.30
[MySQL] SELECT IF, EXIST  (0) 2020.06.30
[MySQL] 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수)  (0) 2020.06.26

+ Recent posts