블로그 이미지
프로그램을 가장 훌륭하게 작성하는 방법은 상태가 변경되는 오브젝트들과 수학적인 값을 나타내는 오브젝트들의 조합으로 표현하는 것이다. -Kent Beck 초초초보

카테고리

Programming (184)
ASP.NET (9)
Silverlight (2)
Javascript (20)
C# (8)
java (25)
SQL (14)
Oracle (3)
MyBatis (3)
기타 (52)
개발방법론 (1)
trouble shooting (2)
Linux (5)
스칼라 (5)
html (2)
grails & gradle (3)
Spring (2)
rabbitmq (1)
(3)
spark (0)
docker (3)
Total
Today
Yesterday

달력

« » 2025.1
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 31

공지사항

최근에 올라온 글

Oracle 에서 데이터 중에 자바 프로퍼티가 들어가야 할 경우가 있다.

이때 자바 컨벤션에 맞게 치환해주는 함수를 만들어 봄.

예) DATA_FIELD_SET - > dataFieldSet

 

--함수만들기

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

CREATE OR REPLACE FUNCTION UF_REPLACE_CONVENTION( V_P IN VARCHAR2)
RETURN VARCHAR2  IS
    V_RESULT VARCHAR2(1000) := '';
    V_TEMP VARCHAR2(1000) := '';
    V_TEMPINDEX NUMBER := 0;
BEGIN

V_TEMP :=  LOWER(V_P);

WHILE INSTR(V_TEMP, '_' ) > 0
LOOP
 V_TEMPINDEX := INSTR(V_TEMP, '_' );
    V_TEMP := SUBSTR(V_TEMP, 0, V_TEMPINDEX-1)|| UPPER(SUBSTR(V_TEMP, V_TEMPINDEX + 1, 1))|| SUBSTR(V_TEMP, V_TEMPINDEX + 2);
END LOOP;

 V_RESULT := V_TEMP;
RETURN V_RESULT;

END UF_REPLACE_CONVENTION;

 

 

--사용

SELECT UF_Replace_convention('DATA_FIELD_SET' )
FROM DUAL;

Posted by 초초초보
, |

 

출처 : http://whitecastle.tistory.com/37

 

펌...

EXP-00008: ORACLE 오류 6552가 발생했습니다
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다

character set 이 섞였기 때문이다.

/* Formatted on 2009/01/31 00:30 (Formatter Plus v4.8.8) */
SELECT DISTINCT (NLS_CHARSET_NAME (CHARSETID)) CHARACTERSET,
DECODE (type#,
1, DECODE (CHARSETFORM,
1, 'VARCHAR2',
2, 'NVARCHAR2',
'UNKOWN'
),
9, DECODE (CHARSETFORM,
1, 'VARCHAR',
2, 'NCHAR VARYING',
'UNKOWN'
),
96, DECODE (CHARSETFORM,
1, 'CHAR',
2, 'NCHAR',
'UNKOWN'
),
112, DECODE (CHARSETFORM,
1, 'CLOB',
2, 'NCLOB',
'UNKOWN'
)
) types_used_in
FROM SYS.col$
WHERE CHARSETFORM IN (1, 2) AND type# IN (1, 9, 96, 112);


결과에서

CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
AL32UTF8 CHAR
AL32UTF8 VARCHAR2
AL32UTF8 CLOB


위처럼이 아니라

CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
US7ASCII CHAR
US7ASCII VARCHAR2
WE8DEC VARCHAR2

US7ASCII CLOB


이런 식으로 하나의 varchar2 에 대해 2개의 characterset 이 나온다면 mix 된 것이다.

이 문제에 대한 처리는 아래처럼 하도록 한다.

a) INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인한다
SQL>show parameter parallel_server

b) 다음스크립트를 SQLPLUS 에서 "as sysdba"로 수행한다.
(물론 백업을 해두는 것도 있지 말자!)

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
SHUTDOWN IMMEDIATE;
STARTUP;
-- yes, 2 times startup/shutdown . This is not a typo
SHUTDOWN IMMEDIATE;
STARTUP;

c) 만약 parallel_server parameter 를 고쳤다면 다시 원상복구한다.

This script doesn't change anything for the data that is already stored, but it
re-enforces database character set to be known in all places where it should be
stored

위 스크립트는 이미 저장된 데이터들을 바꾸지는 않는다. 단지 database 의 character set 을 그것이 저장되어지는 모든 장소에 다시 강제적으로 세팅할 뿐이다.

Posted by 초초초보
, |

Data Type Conversion MS-SQL

Oracle / 2012. 8. 28. 16:38

http://docs.oracle.com/cd/B19306_01/gateways.102/b14270/apa.htm

Posted by 초초초보
, |