코드 저장소

공부에는 끝이 없다!

분류 전체보기 79

SQL Developer를 이용한 Oracle DB Export

이전에 마이그레이션 해두었던 DB를 다른 서버로 옮길 일이 생겼다. 어떻게 할까 하다가 그냥 DB를 통째로 Export해서 다른 서버로 옮기는게 제일 편할것 같아서 Export를 하는 방법을 찾게 되었다. MSSQL은 여러번 작업을 해보았지만 Oracle에서는 처음 해보는터라 정리도 할겸 기록을 남긴다. DB Export와 Import 일반적으로 DB를 주기적으로 백업하거나 다른 서버로 이관할 경우 백업 및 복구 명령어로 사용되는것이 Oracle Export, Import이다. 오라클에서는 2가지 레밸의 방법이 존재하는데, 오라클 DB 전체를 백업하고 복구하는 Full Level과 사용자 단위의 DB를 백업하고 복구하는 User Level이 있다. 1. 전체 백업(Full Level) 오라클의 DB 전체..

DB/Oracle 2023.11.17

(JAVA) 백준 문제 풀이 - 이분 탐색 단계 - 1654번 랜선 자르기 (실버 2)

이번 문제는 이분 탐색 기법을 활용하여 랜선의 갯수와 길이가 주어질 떄, 만들어야 할 랜선의 갯수를 충족하는 최대 길이 값을 구하는 문제이다. 처음 문제를 보았을 때는 어떻게 풀어야 할지 잘 생각이 나지 않았는데 문제 설명을 보면 파라메트릭 서치(Parametric Search)라는 말이 나와 검색을 해보고 풀 수 있었다. 그럼 파라메트릭 서치가 어떤 것이고 어떻게 문제를 풀었는지 다시 한번 복기해본다. 파라메트릭 서치(Parameteric Search)란? 파라메트릭 서치는 주어진 문제가 최적화 문제(최대, 최소값을 구하는 문제) 일 때 주로 사용한다. 이진 탐색과의 비슷하지만 차이가 있다면 이진 탐색이 결정 문제(특정 값이 존재하는지 여부)를 해결하는데 사용된다면 파라메트릭 서치는 최적화 문제의 답을..

(JAVA) 백준 문제 풀이 - 이분 탐색 단계 - 1920번 수 찾기 (실버 4)

이번 문제는 이분 탐색을 이용하여 주어진 수가 특정 배열에 존재하는지 판단하는 프로그램을 작성하는 문제이다. 이분 탐색의 첫 문제인 만큼 이분 탐색이 무엇이고 어떻게 만들어야 하는지 정리해본다. 이분 탐색이란? 어렸을 때 한번쯤 Up&Down 게임을 해본적이 있을 것이다. 상대방이 숫자를 생각해 내면 내가 숫자를 추측해서 말하고 상대방이 그 수가 정답보다 큰지 작은지 말해주는 게임이다. 이분 탐색 알고리즘은 위의 게임과 거의 유사하다. 특정 값을 찾을 때, 중간 값을 기준으로 값을 비교하고 적으면 처음 부터 중간까지, 크다면 중간부터 끝까지 탐색하는 것이다. 다만, 이렇게 하기 위해서 기준 배열이 정렬이 되어있어야 한다는 것이 주의점이다. 예를 들어서, 1,5,3,2,4라는 값이 있고 2라는 값을 찾는다..

(JAVA) 백준 문제 풀이 - 동적계획법 단계 - 9095번 1,2,3 더하기 (실버 3)

최근 동적계획법 문제가 약한것 같아 다시 해당 단계를 풀어보는 중이다. 이번 문제는 정수 n이 주어졌을 때, n을 1,2,3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하는 문제이다. 점화식을 만드는데 꽤 애를 먹었는데 어떻게 풀었는지 정리해보고자 한다. 점화식이 가장 중요하다. 이번 문제에서의 핵심은 점화식을 어떻게 만드느냐였다. 처음에 점화식을 어떻게 만들지를 생각하지 못해서 꽤 애를 먹었는데 결국 핵심은 어떤 정수를 1,2,3의 합으로 나타내는 방법이므로 만드는 숫자는 3개로 한정된 것이 핵심이였다. 우선, 초기값으로 1,2,3에 해당하는 값인 1,2,4를 dp배열에 넣어두었다. 그 후, 4 이상의 값은 n-3,n-2,n-1을 모두 더한값과 같게된다. 무슨 말인지 잘 이해가 안되니 4와 5..

(JAVA) 백준 문제 풀이 - 누적합 단계 - 2599번 수열 (실버 3)

드디어 누적합 단계로 들어왔다. 이번 문제는 누적 합을 이용하여 연속된 날짜간의 온도의 최대값을 구하는 문제이다. 각 날짜에 대한 온도와 구해야 하는 날짜를 받아서 계산을 해야하는데 누적합을 이용하여 계산 시간을 줄이는 것이 핵심인 문제였다. 그럼 어떻게 문제를 풀었는지 살펴보자. 반복의 반복... 이번 문제를 누적합을 쓰지 않고 계산한다고 생각해보자. 총 10일이 주어지고 구해야하는 날짜가 5일인 경우를 생각해보자. 계산은 위의 그림과 같이 이루어져야 한다. 중요한것은 위의 그림을 어떻게 구현할 것인가 인데, 단순히 반복문을 이용하여서 로직을 만든다고 생각해보자. 나와야하는 값은 총 6개이므로 반복도 6번이 될것이다. 그렇다면 전체 갯수 n개가 주어지므로 반복을 최소화 하기 위해 메서드를 통하여 만든다..

JAVA 2023.11.09

(ORACLE) Global Temporary Table과 계층 구조 만들기

MSSQL을 Oracle로 옮기는 작업 중 메뉴에 대한 계층 쿼리를 수정해야 하는 상황이 발생했다. 기존에 MSSQL에서는 테이블 변수를 생성해서 전체 테이블을 담고, MaxLevel을 구한 후, ParentId와 본인의 ID를 통하여 반복문을 사용하여 계층 구조를 만들거나, WITH절을 사용하여 계층 형태로 구성을 하였는데 Oracle에서는 위의 방법이 생각처럼 쉽지가 않았다. Oracle의 Global Temporary Table 오라클에서는 MSSQL의 테이블 변수처럼 사용할 수 있는 Global Temporary Table(편의상 GTT라고 부르겠다)이란 것이 있다. GTT는 쉽게 설명하면 세션 혹은 트랜잭션 수명 주기와 관련이 있는 임시 테이블이라고 생각하면 되겠다. GTT를 만드는것에는 2가지..

DB/Oracle 2023.10.30

(JAVA) 백준 문제 풀이 - 동적계획법 단계 - 2565 전깃줄 (골드 5)

이제 동적 계획법도 얼마 남지 않았다. 이번 문제는 양 쪽의 전봇대에 전깃줄이 교차하지 않도록 없애야 하는 전깃줄의 최소 갯수를 출력하는 문제이다. 점화식을 어떻게 만들지가 좀 어려운 문제였는데 어떤 식으로 풀었는지 살펴보자. 어떻게 구해야 할까? 이번 문제의 핵심은 점화식을 어떻게 만들것인가가 핵심이었다. 처음 생각했을때는 1차원 배열 2개를 만들어 각각의 전봇대의 숫자를 넣은 후, A 전봇대를 기준으로 하여 반복문을 돌린 후 B 전봇대의 값이 이전 인덱스의 최대 값 보다 높으면 카운트를 추가하는 형식으로 구현하려고 하였다. 예를 들어서 예제를 기준으로 보자. 0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 8 2 9 1 4 6 7 10 A 전봇대를 기준으로 하면 다음과 같이 ..

(JAVA) 백준 문제 풀이 - 동적계획법 단계 - 2156번 포도주 시식(실버 1)

이번 문제는 n개 만큼의 포도주가 있을때, 연속으로 3잔을 마실 수 없는 경우 가장 많은 양의 포도주를 마실 수 있도록 하는 프로그램을 작성하는 문제이다. 저번에 풀었던 계단 문제와 크게 다르지 않으므로 간단하게 풀어 낼 수 있었다. 그럼 어떻게 풀었는지 살펴보자. 규칙은 간단하다! 규칙은 이전 계단 문제와 비슷하다. 3잔을 연달아 마실수 없으므로 결국 비교해야하는 것은 -3 인덱스에 -1 인덱스에 해당하는 값을 더한 값과 -2된 값중 큰것을 자기 인덱스의 값과 더하면 된다. 테이블로 살펴보자. 0 1 2 3 4 5 6 0 6 10 13 9 8 1 0 6 16 초기값을 셋팅해주면 (0번째 인덱스는 무조건 0이라고 가정한다.) 2번째 인덱스의 값은 무조건 1번 인덱스의 값에 자기 값을 더한 값이 된다. 그..

(JAVA) 백준 문제 풀이 - 동적계획법 단계 - 1463번 1로 만들기 (실버3)

주어진 수를 규칙에 따라 1로 만들 때 가장 최소 연산하는 횟수를 구하는 간단한 문제이다. 정말 간단한 문제였는데 생각을 잘못해서 한참을 헤멘 문제이기도 했다. 그럼 문제를 한번 살펴보자. 정말 간단한 문제! 문제는 정말 간단하다. 우선 규칙은 3으로 떨어지면 3으로 나누거나 2로 떨어지면 2로 나누거나 1을 뺀다. 이다. 즉, 주어진 수 크기의 배열을 만들고, 최소값만 가져오면 마지막 주어진 수 n 에는 최소 횟수가 기록되게 된다. 다만, 주의 할점이 있는데 예를 들어 10의 경우 2로 나눌수 있기 때문에 바로 2로 나누는 경우 10 > 5 > 4 > 2 > 1의 4번이 되지만 -1을 하면 10 > 9 > 3 > 1 이되므로 3번만에 나눌수 있다. 그렇다면 우리가 비교할 것은 지금 수에 -1 한 값과 ..

오라클 ORA-01002 오류와 해결방법

최근 MSSQL로 만들었던 서드파티 프로그램을 고객사 요청에 따라 Oracle DB로 변환하는 작업을 하고 있다. 그냥 단순하게 Adater바꾸고 Command 바꾸고 하면 끝날줄 알았는데... 생각보다 과정이 까다롭다. 일단 제일 문제가 되는 부분은 프로시저 호출이었는데 기존에 MSSQL 사용 당시 거의 대부분을 프로시저화 해서 호출해서 사용했다. 데이터 자체는 Oracle의 Migration을 이용해서 몽땅 다 옮겼는데 변환된 프로시저 대부분이 제대로 동작하지 않는 것을 확인하였다. 그래서 프로시저를 이리저리 수정중인데... 문제가 된 프로시저는 메뉴를 만드는 프로시저인데 임시테이블에 첫행을 Insert하고 재귀하면서 계층형 구조를 만든 뒤 Sys_RefCursor로 반환하는 프로시저이다. creat..

DB/Oracle 2023.10.27