맨날 %로 검색만 하다보니 예전에 배웠는데 까먹은 것이 있었다.

 

글자수까지 포함해서 검색이 가능하다는것

 

예) NAME :

손자병볍

손흥민

손자

 

검색: 손으로 시작하는 3글자를 찾아라

 

WHERE NAME LIKE '손__' --(언더바 두개 넣음)

 

이렇게 하면 

 

*결과:손흥민

이런식으로 응용하면 굉장히 편리

 

WHERE NAME LIKE '손자__' --(언더바 두개 넣음)

 

이러면 

 

*결과: 손자병법

MERGE INTO 등록할_테이블_명 TB_NM

  USING(SELECT USER_NO FROM USER_TABLE WHERE USER_NO = '001') U_TB --> 검색할 쿼리

  ON (TB_NM.USER_NO = U_TB.USER_NO)  --> INSERT, UPDATE 조건

    WHEN MATCHED THEN -- 조건에 일치할경우 이하의 쿼리 실행 (UPDATE)

        UPDATE

        SET TB_NM.USER_NO = '001',

                TB_NM.USER_NAME = '유저명'

    WHEN NOT MATCHED THEN --> 조건이 일치하지 않을경우 이하의 쿼리 실행 (INSERT) 

        INSERT (TB_NM.USER_NO, TB_NM.USER_NAME)

        VALUES ('001', '유저명')

 

 

만약 한개의 테이블에서 검색/입력/수정을 할 경우에는 DUAL을 사용하는 편이 낫다.

============================ 이하 예시 ============================

 

MERGE INTO USER_TABLE A

  USING DUAL

       ON (A.USER_NO = '10')

WHEN MATCHED THEN

UPDATE SET

             DEPT_NO = '30'

WHEN NOT MATCHED THEN

INSERT (USER_NO, USER_NM, DEPT_NO)

VALUES('10', '유저명', '30')

 

 

1. 위의 query는 정상인데 ORA-00900 : SQL문이 부적합니다.  라는 오류가 발생한다면 

    JAVA에서 dataAccesser.update 를 사용한게 아니라 dataAccesser.query 를 사용했기 때문.

 

2. 한개의 테이블에서 검색/입력/수정할 경우에는 USING DUAL 을 사용, ON에 직접 조건 값을 입력해준다.

 

○출처ㅣm.blog.naver.com/PostList.nhn?blogId=bluefish115

INSTR 함수는 문자열(string)에서  지정된 문자열(substring)을 검색해서 그 위치를 리턴하는 함수입니다.

 

위치는 지정된 문자열이 나타나는 제일 첫번째 위치를 리턴합니다. 

 

예를들어 'CONGRATULATIONS'라는 단어에는 'AT'라는 문자열이  두번 나타납니다(CONGRATULATIONS).

 

첫번째 AT와 두번째 AT를 찾는 문장은 아래와 같습니다. 

 

첫번째 'AT' 검색 : INSTR('CONGRATULATIONS', 'AT', 1, 1)

'CONGRATULATIONS' 문자열에서 'AT' 문자열을 첫번째문자(C)부터 찾아서 'AT'문자열이 처음나오는 위치를 리턴하라. 첫번째 'AT'에서 'A' 의 위치는 여섯번째므로 6이 리턴.

 

두번째 'AT' 검색 : INSTR('CONGRATULATIONS', 'AT', 3, 2)

'CONGRATULATIONS' 문자열에서 'AT' 문자열을 세번째문자(N)부터 찾아서 'AT'문자열이 두번째 나오는 위치를 리턴하라. 두번째 'AT'에서 'A'의 위치는 열번째이므로 10이 리턴.

 

오라클에서 자바 RANDOMUUID() 내장함수 쓰기

 

일단,

 

dba_registry 을 뒤져서 오라클에 JVM이 설치되어 있는지 확인한다.

 

select comp_name, version, status from dba_registry; 

 

comp_name컬럼에 JServer JAVA Virtual Machine 이놈이 있다면 가능

 

없으면 

 

sql> @$ORACLE_HOME/javavm/install/initjvm.sql;

실행하거나 

 

저 경로로 가서 해당 sql의 DDL을 직접 복붙해서 실행한다.

이건 안해봤음... 

 

(참조)

 

어쨌든 JVM이 설치되어 있다면, 다음과 같은 SQL명령어를 먼저 실행한다.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

CREATE OR REPLACE AND COMPILE

 

java source named "RandomUUID"

 

as

 

public class RandomUUID {

 

public static String create() {

 

return java.util.UUID.randomUUID().toString();

 

}

 

};

 

정상적으로 실행이 완료되었다면,

 

이제 FUNCTION을 만들자.

 

1

2

3

4

5

6

7

CREATE OR REPLACE FUNCTION O_ONEMES.RandomUUID

 

RETURN VARCHAR2

 

AS LANGUAGE JAVA

 

NAME 'RandomUUID.create() return java.lang.String' ;

 

 

 

이 함수를 만들었다면,

 

실행해보자

SELECT RANDOMUUID() FROM DUAL;

 

이런식의 결과값이 나올것이다.

ex) 8b636560-99dc-4c75-976b-56350f4f40ca

 

 

추가: 내장객체 쓰지 않고 랜덤 채번 함수 만들기

https://mo-world.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%9E%9C%EB%8D%A4-%ED%82%A4%EC%83%9D%EC%84%B1-%EB%B0%A9%EB%B2%95-2%EA%B0%80%EC%A7%80-FUNCTION%ED%95%A8%EC%88%98

+ Recent posts