달력

112024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

상황설명은 생략하고 ... 

이클립스 실행시 Runtime 오류가 발생한다.

컴 포멧후 다시 셋팅할때마다 만나는 그런녀석...

그러니까.....JVM(Java Virtual Machine) 을 찾을수 없다는것....

일단 이렇게 해결하자.

eclipse 가 있는 폴더에 (eclipse.exe 와 같은경로) 에 보면 

eclipse.ini 를 열어보면 위에서 좀 내려보면 

요렇게 있는데 이 경로가 틀리다는 말임. 이 경로를 맞춰주고 저장..

 

Posted by redev
|

오라클 프로시져 작성시 중간중간 예외처리를 해야 하는 경우가 있습니다 

아래 내용을 다 쓰진 않지만 참조하시면 좋을것 같습니다.

ACCESS_INTO_NULL 정의되지 않은 오브젝트 속성에 값을 할당하고자 했을때 발생되는 예외.
CASE_NOT_FOUND CASE 문의 WHEN 절에 해당되는 조건이 없고 ELSE 절도없을 경우에 발생되는 예외.
COLLECTION_IS_NULL 선언되지 않은 컬렉션(nested table, varray)에EXISTS 이외의 메소드를 사용했을 때 발생되는 예외.
CURSOR_ALREADY_OPEN 이미 열려진 커서를 열려고시도 했을 때 발생되는 예외.
DUP_VAL_ON_INDEX 유일인덱스에 중복값을 입력했을 경우 발생되는 예외.
INVALID_CURSOR 잘못된 커서 조작이 실행될때 발생되는 예외.
INVALID_NUMBER 문자를 숫자로의 변환시 실패가 될 때 발생되는 예외.
LOGIN_DENIED 잘못된 사용자명 이나 암호로 로그인을 시도했을 때 발생되는 예외.
NO_DATA_FOUND PL/SQL SELECT 문이 한 건도리턴하지 못했을 경우 발생하는 예외
NOT_LOGGED_ON 접속되지 않은 상태에서 데이터베이스에 대한 요청이PL/SQL 프로그램으로 실행된경우 발생되는 예외.
PROGRAM_ERROR PL/SQL 이 내부적인 문제를가지고 있는 경우 발생되는예외
ROWTYPE_MISMATCH 할당문에서 호스트 커서 변수와 PL/SQL 커서 변수의 데이터 형이 불일치 할 때 발생되는 예외
STORAGE_ERROR PL/SQL 이 실행될 때 메모리가 부족하거나 메모리상에문제가 일어났을 때 발생하는 예외
SUBSCRIPT_BEYOND_COUNT 컬렉션의 요소 개수보다 더큰 첨자값으로 참조한 경우발생되는 예외.
SUBSCRIPT_OUTSIDE_LIMIT 컬렉션의 첨자의 한계를 벗어난 참조가 일어났을 때 발생되는 예외
SYS_INVALID_ROWID 문자열을 ROWID 로 변환할때 무효한 문자열의 표현일경우 발생되는 예외
TIMEOUT_ON_RESOURCE 자원에 대한 대기시간이 초과했을 때 발생하는 예외
TOO_MANY_ROWS PL/SQL SELECT 문이 두 건이상의 행을 리턴했을 때 발생되는 예외
VALUE_ERROR 산술, 변환, 절삭 또는 크기제약에 에러가 생겼을 때 발생되는 예외
ZERO_DIVIDE 0 으로 나누려 했을 때 발생하는 예외.
Posted by redev
|

오래된 버전이라 최근 것은 없지만 참고는 될듯 합니다.

sheet1(Hint-1) 은 용도로 정렬 

sheet2(Hint-2) 는 abc 순으로 정렬

첨부파일 다운로드  

ORACLE_hint.xlsx
0.02MB

 

Posted by redev
|

가끔 특정 문자가 포함되었는지 보고 싶을 때가 있다 

이럴때 COUNTIF 를 사용 한다. 

아래와 같이 "지각"이라는 단어가 포함 되었는지만 따져 보고 싶을때 

지각여부 셀(C열)에 COUNTIF(B2,"*지각*") 라고 쓰면 됨.

'Tip > Excel' 카테고리의 다른 글

[단축키] 엑셀(Excel) 단축키 :: 리뎁  (0) 2019.12.01
Posted by redev
|

Any타입 변수는 자료형이 특별히 정해 지지 않은 경우에 사용한다. 

코틀린 에서 Any은 모든 클래스(변수) 의 엄마 이다.

Int, 나 String 나 사용자가 만든 클래스 까지 모두 Any형의 자식인 셈.

 

 

 

 

모든 클래스(변수)의 엄마니까 언제든 모든 자료형으로 자동변환이 가능하다.

이런것을 묵시적변환  이라고 하는데 다음 예제를 보자

println("===============묵시적변환 Any 테스트 START================")
var anyTest: Any = 1
if (anyTest is Int) {
typeStr = "anyTest Int:"
}else if(anyTest !is Int){
typeStr = "anyTest 머임:"
}
println("$typeStr $anyTest") // 변환전 타입을 확인

anyTest = 45L // Long 타입을 대입하여 자동변환을 확인해봄
if (anyTest is Long) {
typeStr = "anyTest Long:"
}else if(anyTest is Int){
typeStr = "anyTest 아직 Int임:"
}
println("$typeStr $anyTest") // Long 타입으로 자동
println("변수 anyTest의 변환된 타입은: ${anyTest.javaClass}") // anyTest의 자바 기본형을 출력하면 long
println("===============묵시적변환 Any 테스트 E N D================")

결과는 

===============묵시적변환 Any 테스트 START================
anyTest Int: 1
anyTest Long: 45
변수 anyTest의 변환된 타입은: long
===============묵시적변환 Any 테스트 E N D================

Any 타입의 형변환 되는 과정을 봤다. 

근데 참고로 실무에서는 마구잡이로 쓰진 않는다. 


코틀린에 어떤 Error 가 있는지 궁금하면?? 클릭 -> [코틀린] 오류코드 정리 :: 리뎁

자료형 과 변수가 궁금 하다면 ? 클릭 -> [코틀린] 자료형과 변수 & 엘비스 연산자 :: 리뎁

이중등호 삼중등호가 궁금하면? 클릭 -> [코틀린] 자료형 비교/변환 - 이중등호-삼중등호 :: 리뎁

코틀린 스마트캐스트 ? 클릭 -> [코틀린] 스마트캐스트 :: 리뎁

Posted by redev
|

자료형 검사하기

자료형 검사를 해보자 

val a4: Int = 128
val b4: Int? = 128

println("===자료형 검사===")
if (a4 is Int) {
println("a4 는 Int 형입니다.")
}

결과는 

===자료형 검사===
a4 는 Int 형입니다.

그럼 위에 스마트캐스트 테스트한 2-4.1 에서 작성 코드로 자료형 잘 변환 되었는지 확인 해 보자 

println("===============Number형 smartcast 테스트 START================")
var NumbTest: Number = 21.2
var typeStr = ""

if (NumbTest is Number) {
typeStr = "Number:"
}else{
typeStr = "뭘까요?:"
}
println("$typeStr $NumbTest") // Float 형 smartcast 테스트

NumbTest = 21
if (NumbTest is Int) {
typeStr = "Int:"
}else if(NumbTest is Number){
typeStr = "Number:"
}
println("$typeStr $NumbTest") // Int 형 smartcast 테스트

NumbTest = 21.3
if (NumbTest is Float) {

typeStr = "Float 상수값:"
}else if(NumbTest is Number){

typeStr = "Number 상수값:"
}

println("$typeStr $NumbTest") // Float 형 smartcast 테스트

NumbTest = 210L
if (NumbTest is Long) {
typeStr = "Long:"
}else if(NumbTest is Number){
typeStr = "Number:"
}
println("$typeStr $NumbTest") // Long 형 smartcast 테스트

NumbTest += 21.1f
if (NumbTest is Float) {
typeStr = "Float:"
}else if(NumbTest is Number){
typeStr = "Number:"
}
println("$typeStr $NumbTest") // Float 형 smartcast 테스트
println("===============Number형 smartcast 테스트 E N D================")

결과는 

===============Number형 smartcast 테스트 START================
Number: 21.2
Int: 21
Number 상수값: 21.3
Long: 210
Float: 231.1
===============Number형 smartcast 테스트 E N D================

잘 보면 알겠지만 최초 Number 타입은 Number로 인식한다....(당연한건가.ㅋ) 

이후 형변환이 되면서 각 자료형에 맞게 출력되는데 

중간에 추가된 붉은색 부분은 여전히 Number로 인식한다. 

Float로 인식시키려면 "21.3F" 라고 해야함.

 

 


코틀린에 어떤 Error 가 있는지 궁금하면?? 클릭 -> [코틀린] 오류코드 정리 :: 리뎁

자료형 과 변수가 궁금 하다면 ? 클릭 -> [코틀린] 자료형과 변수 & 엘비스 연산자 :: 리뎁

이중등호 삼중등호가 궁금하면? 클릭 -> [코틀린] 자료형 비교/변환 - 이중등호-삼중등호 :: 리뎁

Posted by redev
|

스마트캐스트

어떤 값이 정수와 실수 모두를 사용한다면? 매번 자료형을 변환해도 되지만 

코틀린 컴파일러가 자동으로 형 변환을 하는 스마트캐스트(Smartcast)를 사용하면 

더욱 편리할 수 있다.

대표적인 자료형은 Number 이다. 

아래를 보자 

println("===============Number형 smartcast 테스트 START================")
var NumbTest: Number = 21.2
println("$NumbTest") // Float 형 smartcast 테스트

NumbTest = 21
println("$NumbTest") // Int 형 smartcast 테스트

NumbTest = 210L
println("$NumbTest") // Long 형 smartcast 테스트

NumbTest += 21.1f
println("$NumbTest") // Float 형 smartcast 테스트
println("===============Number형 smartcast 테스트 E N D================")

결과는 

===============Number형 smartcast 테스트 START================
21.2
21
210
231.1
===============Number형 smartcast 테스트 E N D================

잘 처리 됨을 알수 있다. 

Number 의 자세한 내용은 추후 다뤄 보기로 한다.

 


코틀린에 어떤 Error 가 있는지 궁금하면?? 클릭 -> [코틀린] 오류코드 정리 :: 리뎁

자료형 과 변수가 궁금 하다면 ? 클릭 -> [코틀린] 자료형과 변수 & 엘비스 연산자 :: 리뎁

코틀린의 이중등호 삼중등호가 궁금하면? 클릭 -> [코틀린] 자료형 비교/변환 - 이중등호-삼중등호 :: 리뎁

 

Posted by redev
|

지난번 

[SQL]#1. SQL 작성순서?

에서는 SQL을 작성하는 순서를 얘기했었다 

#1 의 마지막에 

SQL을 작성하기 어려운 두가지 문제를 말했었다.

물론 두가지 보다 더 많은 이유가 있지만 가장 원인이 되는 두가지를 살펴 보자 

(이 두가지 이외에 다른 문제들도 다뤄 본다.)

 ** 단순 조인은 할 수 있다는 전제로 설명 **

 

1. 원하는 데이터가 TABLE 로 없다...

이게 무슨 말인가 하면 

우린 기본적으로 DML을 안다. 그러니 우리가 원하는 Column이 특정테이블에 있다면 

SQL을 작성하는데 아무 문제가 없다.

근데 현실은 그렇지 않다. 예를 들어 

T1 테이블에 매출 데이터가 있다고 가정하자. 당연히 판매일자 , 판매처, 품목, 수량, 단가, 금액등이 있을것이다 

(조회 기준 : 판매일자 >= 20191101 & 판매일자 <=20191130) 

판매일자 판매처 품목 수량 단가 금액
2019-11-08 잘사가 다뚫어송곳 1000 100 100,000
2019-11-26 가끔사 다버려휴지통 10 1,200 12,000
2019-11-29 또사가 다쓸어빗자루 2 2,500 5,000

 

실제로 조회는 이렇게 단순히 하는게 아니라 

[[11월 판매 데이터와 각 판매처 별로 11월 이전 가장 최근 데이터를 구하고 또

평균 구매간격과, 총 구매금액을 같이 조회 ]] 하고 싶다면..

단순히 select * from T1 으로는 안된다.

지금 여기서 말하고 싶은건 단순히 어떤 기술적인 요소를 말하고 싶은게 아니다. 

본인이 말하고 싶은건 @1 이럴때 우린 어떤 사고방식을 가져야 하는가? or 어떻게 접근해야(생각해야) 하는가?? 이다.

@1 부분이  sql 작성시에 초급 개발자들을 막막하게 하는 것이다.

본인은 이렇게 권한다.

1. 아래와 원하는 데이터가 있는 그렇게 생긴 테이블이 있다고 가정을 하라 ( Excel 등에 적어 두는걸 권장) 

   가상의 테이블 이름도 지어주자. 여기선 PT1.

판매처 최근 판매일자 평균 구매간격 총 구매금액
잘사가 2019-10-15 16.5 일 157,200
또사가 2019-10-29 26.3 일 255,000
가끔사 2019-08-05 78.8 일 680,000

 

2. T1과 PT1의 조인 관계를 생각해 보자

PT1은 판매처별로 데이터가 있다 그러니 T1과의 조인은 판매처만으로 조인이 될것이다. 

 

3. 그럼 우린 [[ ]]  를 작성하는게 아니라 PT1을 작성하는 셈이 되는것이다. 

PT1만 작성할수 있다면 결국 T1과 조인만 하면 [[ ]]  내용이 완성 되는 것이니까.

PT1의 내용이 이렇게 단순하지 않다면 ?? 다시 PT1-1 , PT1-2 , PT2 등을 분리하여 생각 하면 그만이다.

우리는 이 PT1.. 등을 생각해 내는걸 "집합적인 사고방식" 이라고 한다. 

이게 된다면 SQL 작성의 80%는 끝난 것이다. 

 

4. 속도는요? 

일단은 속도를 신경쓸 겨를이 없지 않은가? 걷지도 못하는데 날려고 하는 꼴이다.

 

2. JOIN의 개념을 모른다.

 

JOIN을 아는가, 모르는가 의 얘기를 하려는 것이 아니다. 

JOIN 할때 어떤 부분을 생각하고 고민해야 하는지를 말하려고 한다.

 

1. JOIN은 곱하기다. 

T1 에 2개의 ROW가 있고 T2에 4개의 ROW가 있다면 아래와 같이 아무 조건없이 

SELECT COUNT(*) FROM T1, T2 

이렇게 쿼리를 한다면 결과는 8 이다 .  당연하다 JOIN은 곱하기 이고 

조건이 없고 각 테이블에 2개의 로우가 있으니 2x4=8

이말은 어떤 COLUMN으로 서로 조인했을때도 동일하다. 

이 곱하기 되는 부분을 고민 해야 한다. 

 

2. 누가 메인이야? 

T1, 과 T2 에서 어느 테이블이 주 테이블인가? (어느 테이블이 더 중요한가) 

예를 들어 

T2는 무조건 나와야 한다면 OUTER 는 T1이 되는 것이다 .

SELECT T2.KEY, T2.CODE, T2.NAME , T1.NAME

FROM  T2 LEFT JOIN T1 ON T2.KEY = T1.KEY 

위 SQL을 해석하면  "행 기준으로!! T2는 무조건 나오고 T1 은 있으면 나오고 없으면 말고" 라는 뜻이다. 

그러니 T2.KEY 에 있는 값이 T1.KEY 에 없다고 하더라도 무조건 나오게 된다. 

사실 Join은 이보다 더 어려운 개념이지만 위의 두가지 개념을 확실히 해야 다음으로 넘어갈 수 있다.

 

3. 다른건 없나요?

 

다른 요인도 많지만 위의 1,2 항목이 가장 기본이라 할 수 있겠다 

참고로 몇가지 더 말해보면 

1. 함수 및 문법 숙지 : 각 DBMS에서 제공하는 함수와 그 사용처 문법을 숙지 하는것

2. 많이 작성해 볼것 : 말할것도 없다.

3. 자신만의 SQL 사전을 관리 할 것 : 인테넷에 많이 있지만 본인만의 설명으로 본인이 이해할수 있는 sql 사전을 만들면 좋다. 

 4. 동일한 결과를 분석함수를 쓸때와 안쓸때를 구분해 볼것.  : 분석함수는 각 DBMS에서 제공해주는 매우 유용한 함수이지만 분석함수를 쓰지 않고 동일한 결과를 만들어 내는 연습을 하면 SQL 작성에 많은 도움이 된다.

5. 옵티마이져가 되어 볼것 : 우리가 SQL을 작성하고 실행하면 각 DBMS의 옵티마이져가 이를 분석/해석하고 처리하게 된다. 그 역할을 상상하고 되어 보는것도 매우 많은 도움이 된다.

6. 테스트 테이블을 가질것 : 자신만의 테스트 테이블을 가지는게 좋다 부분 부분의 sql을 작성해볼 수 있는 테스트 테이블을 통해 실제 결과를 눈으로 확인하면서 SQL을 작성해 본다 

7. 주석의 관리 : SQL도 주석을 달 수 있다. 다음 운영자를 위해서라도 주석을 꼼꼼히 다는 습관을 지녀야 한다.

8. 지난 SQL 검토 : 예전에 작성한 SQL을 검토해 본다 (당시 작성할때 고생했던 SQL들) ... 뭐 해보면 알것이다.

 


이상 SQL의 작성 순서와 작성시 왜 어려웠는지 알아봤다.

근데...결국은 스스로 해보고 답을 찾아야 한다. 

위에 작성한 내용 역시 그렇게 찾은 결론이다. 

정답이 아닐수 있겠고 정말 SQL을 잘 하시는 선수들이 보면 뭐라 할지 모르겠다 ㅎㅎ 

그럼 이만~ 

Posted by redev
|