반응형


에러 ( ORA-06550 )

ORA-06550: 줄 1, 열7:PLS-00201: 'PROC_INPUT_DATA' 식별자가 정의되어야 합니다

ORA-06550: 줄 1, 열7:PL/SQL: Statement ignored


-> 프로시저가 없는경우프로시저가 있는데 권한이 없는경우이 에러가 나옵니다.


해당 프로시저가 없을경우는 생성해주고, 

그 외에는    

문자열 오타를 확인하거나 오라클쪽에서 계정권한을 확인하시면 될것 같습니다.


반응형
반응형

오라클에서 데이터를 한줄로 가져오는 예제와 LISTAGG 한글 깨짐현상에 대해서 포스팅하겠습니다.


여러행을 한줄로 구분자를 줘서 하나의 컬럼으로 가져오는 예제로 LISTAGG 함수를 사용합니다.



*사용예제는 아래와 같이 사용하시면 되고, 기호에 맞게 변경하셔서 쓰시면 됩니다. 



SELECT 

    LISTAGG(컬럼, 구분자) WITHIN GROUP (ORDER BY 정렬할 컬럼) AS 바꿀 컬럼명 

 FROM 

    테이블 

WHERE 

    조건문




*아래는 예제를 위한 예제테이블을 만들었습니다.



SELECT 

    * 

FROM 

    (

        select 'A' as 영어, '1' as 정보 from dual

        union all

        select 'B' as 영어, '2' as 정보 from dual

        union all

        select 'C' as 영어, '1' as 정보 from dual

        union all

        select 'D' as 영어, '1' as 정보 from dual

    )



결과는 아래와 같습니다.







*이제 위 테이블을 가지고 데이터를 한줄로 가져오겠습니다.

 - 영어컬럼을 한줄로 가져올 예정입니다.

 - 정보가 1인 것을 조건으로 주겠습니다.

 - 구분자는 , (콤마) 로 사용하겠습니다.


SELECT 

    LISTAGG(a.영어, ',') WITHIN GROUP (ORDER BY a.영어) AS 영어정보

 FROM 

      (

        select 'A' as 영어, '1' as 정보 from dual

        union all

        select 'B' as 영어, '2' as 정보 from dual

        union all

        select 'C' as 영어, '1' as 정보 from dual

        union all

        select 'D' as 영어, '1' as 정보 from dual

    ) a

WHERE 정보 = '1'



위의 쿼리를 실행하면 아래와 같이

 - 조건인 정보가 '1'인 영어 컬럼의 데이터를 한줄로 뽑아냈습니다.



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


LISTAGG 한글 깨짐현상


LISTAGG를 사용해서 컬럼을 가져왔는데 한글이깨지는 경우는 컬럼 타입이 NVARCHAR 일 경우 그러는 것 같습니다.

NVARCHAR 타입을 VARCHAR로 데이터 타입 변환 함수인 CAST를 사용하여 변환해주세요.


CAST ( 컬럼 AS VARCHAR(50) ) AS 컬럼명


위와 같은 형식으로 사용하면 됩니다.


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


오라클에서 데이터를 한줄로 가져오기 및 LISTAGG 한글 깨짐현상에 대해 알아봤습니다.


감사합니다.








반응형
반응형


오라클 DECODE함수 특정값 변환

DECODE(name, 'park, 1, 0)

위와같이 DECODE를 사용하시면되는데

컬럼 name의 값이 'park' 이면 1 아니면 0으로 치환해줍니다.

그밖에 조건또는 DECODE로 힘든 경우는

when case 구문을 사용하시면 됩니다.

반응형
반응형


날짜 타입변환

TO_DATE : 문자열을 가지고 날짜타입으로 변환

TO_CHAR : 날짜타입을 가지고 문자열로 변환


형식

YYYYMMDD

YYYY/MM/DD

YYYY-MM-DD

YYMMDD

YYYY-MM-DD HH:mm:ss ( *타임스탬프는 시간 초단위까지 표시가능 / DATE는 문자열로표시가능 )

등등 여러형식으로 원하는 포맷을 정해서 데이터를 포맷하면됩니다.


//문자열을 데이터 포맷후 다시 문자열로

myDate = "2017-10-10"

TO_CHAR( TO_DATE( myDate,'YYYYMMDD' ) )  -> "20171010"


// 현재시간을 가져와서 포맷

SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH') as nowDate FROM dual


오라클 연속된 날짜 데이터 만들기 ( 20170105~20170112 )

  SELECT 

    TO_CHAR(TO_DATE('20170105', 'yyyymmdd') +LEVEL -1, 'yyyymmdd') searchDate

  FROM 

    DUAL

  CONNECT BY TO_DATE('20170105','yyyymmdd') + LEVEL -1  <= TO_DATE('20170112', 'yyyymmdd')



오라클 연속된 숫자 만들기

SELECT LEVEL val FROM DUAL CONNECT BY LEVEL <= 10

반응형
반응형

오라클 / MYSQL의 날짜별 요일 구하는 법

오라클과 MYSQL에서 DATE의 값을 가지고 혹은 날짜형식의 STRING을 가지고 요일을 리턴하는 함수 및 쿼리입니다.
오라클같은경우는 day, dy, d로 요일까지 출력, 요일제외출력, 정수출력 3가지를 지원해서 더 편합니다.
MYSQL 같은경우에는 영어로 요일이 나와서 정수형식을 리턴받아서 한글로 변환해줘야합니다.

오라클 날짜 요일구하기

TO_CHAR( 날짜, 'day' )

*day = 월요일
*dy = 월
*d = 2 ( 1~7 일~토)


-- String으로 요일구하기

SELECT
   TO_CHAR( (TO_DATE(20171101) ), 'day')
FROM DUAL

결과값 = 수요일

SELECT
   TO_CHAR( (TO_DATE(20171101) ), 'dy')
FROM DUAL

결과값 = 수

SELECT
   TO_CHAR( (TO_DATE(20171101) ), 'd')
FROM DUAL

결과값 = 4

 

-- date로 요일구하기

SELECT
    TO_CHAR(SYSDATE, 'day')
FROM DUAL

결과값 = (오늘이 금요일일때!) 금요일

SELECT 
    TO_CHAR(SYSDATE, 'day') 
FROM DUAL

결과값 = (오늘이 금요일일때!) 금

SELECT 
    TO_CHAR(SYSDATE, 'day') 
FROM DUAL

결과값 = (오늘이 금요일일때!) 6


MYSQL 날짜 요일구하기

DAYOFWEEK( DATE ) -- 정수로 리턴

DAYNAME( DATE ) -- 영어요일로 리턴

*DAYOFWEEK 숫자 ( 1~7 일~토 )


SELECT DAYOFWEEK( '2017-11-10' )

결과값 = 6

SELECT DAYNAME( '2017-11-13' )

결과값 = Monday


한글값 요일을 불러오고싶을 때

SELECT SUBSTR(_UTF8'일월화수목금토', DAYOFWEEK('2017-11-10'), 1 );



반응형
반응형

저장 프로시저 ( stored procedure / SP ) 정의 및 장점


저장 프로시저란?

일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 

데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한(지속성) 것으로, 

영구저장모듈(Persistent Storage Module)이라고도 불린다.

쉽게말해서 저장프로시저는 데이터베이스에서 처리해야 할 어떤 로직을 구성하고

그것을 하나의 명령어로 처리할 수 있게 하는 것이며 복잡한 처리의 조회 등의 쿼리를 작성할때 사용합니다.


저장 프로시저의 장점

-DB보안

sql인젝션과 문법적인 취약점을 이용하여 해킹하기가 어렵다.

자체적인 보안설정 기능을 가지며, 스토어드 프로시저 단위로 실행권한을 부여할 수있다.


-성능 및 개발

저장프로시저 컴파일 후에 프로시저 캐시를 가지고 있어 성능향상이 된다.

sql문이 서버에 저장되어 쿼리문 자체를 보내지 않고, 저장프로시저의 매개변수만 보내 트래픽양을 줄여준다.

네트워크 소요시간을 줄일수있다.

코드 재사용에 용이하다.


반응형
반응형

오라클, MYSQL 소수점 처리방법

오라클과 MYSQL의 소수점 처리방법에 대해 알아보겠습니다.


오라클 소수점 처리방법

소수점 내림
TRUNC (숫자컬럼, 자릿수)

EX) SELECT user_id, TRUNC( user_money , 2 ) FROM user_info  --  user_money를 소수점 둘째자리에서 내림하겠다.

소수점 반올림
ROUND(숫자컬럼, 자릿수)

EX) SELECT user_id, ROUND( user_money , 2 ) FROM user_info  --  user_money를 소수점 둘째자리에서 반올림하겠다.


MYSQL 소수점 처리방법

소수점 내림
TRUNCATE(숫자컬럼, 자릿수)

소수점 반올림
ROUND(숫자컬럼, 자릿수)

올림 (소수점자리상관없이 올림 / 정수)
CELING(숫자컬럼)

내림(소수점자리상관없이 림 / 정수)
FLOOR(숫자컬럼)

반응형
반응형

invalid identifier 오라클 오류

ORA-00904: 부적합한 식별자

존재하지 않는 컬럼명을 사용하거나 잘못된 테이블명이 있는 경우 발생

-> 컬럼명이나 테이블명 확인


too many values 오라클 오류

ORA-00913

INSERT 할때 원래컬럼수보다 더 많을경우 발생

-> 컬럼 갯수 확인


constraint violation 오라클 오류

 constraint violation ( ) : primary key not found

ORA -02291 : 무결성 제약 조건 위반 - 상위 키를 찾을 수 없음 팁

외래 키 값에 일치하는 기본 키 값이 없을때 발생

-> 외래 키를 삭제하거나 외래키테이블에 외래키와 일치하는 기본 키를 추가


unique constraint violated 오라클 오류

ORA-00001: unique constraint violated

무결성제약조건 에러로 테이블에 한개만 존재해야하는 key를 중복해서 넣으려고 할때 발생

 -> insert시 기본키, 외래키 등 확인을해서 중복이 안되게 데이터 변경


date format picture ends before converting entire input string 오라클 오류

ORA-01830: date format picture ends before converting entire input string

DATE에 시간을 넣으면 나타나는 에러

 -> 타입을 date에서 datetime이나 timestamp로 변경하거나 '2017/10/20 15:00:00'에서 뒤에 시간을 제거해주면 됨

반응형
반응형

오라클 - 문자형 데이터 인덱스 자동증가

시퀀스나 자동증가같이 숫자형 컬럼에서만 사용할 수 있는데

그래서 문자형에서도 사용할수있는 자동증가 쿼리입니다.

데이터를 숫자 1~n으로 넣어놓고 데이터의 최대 max값( n값 )을 찾아 그것보다 높은 것으로

insert해줍니다.


INSERT INTO 테이블명(컬럼명) VALUES ( SELECT NVL( MAX(컬럼명 + 1),1 ) FROM 테이블명 )

반응형
반응형

오라클 테이블 컬럼추가 및 코멘트,설정 수정


컬럼 추가

ALTER TABLE 테이블명 ADD (컬럼명 타입());

ex) ALTER TABLE user_info ADD ( user_phone char(10) );


컬럼 DEFAULT, NOT NULL 수정

ALTER TABLE 테이블명 MODIFY(컬럼명 NOT NULL);

ALTER TABLE 테이블명 MODIFY(컬럼명DEFAULT '디폴트값');


컬럼명 수정

ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 변경할컬럼명;


컬럼 코멘트 수정

COMMENT ON COLUMN 테이블명.컬럼명 IS '코멘트';


테이블 코멘트 수정

COMMENT ON TABLE 테이블명 IS '코멘트';



반응형

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

오라클 쿼리 오류  (0) 2017.11.01
오라클 - 문자형 데이터 인덱스 자동증가  (0) 2017.10.26
오라클, mysql, mssql 문자열 합치기  (0) 2017.10.25
RDBMS, RDB 정의 및 기능  (0) 2017.10.12
SQL 문법 - SELECT문 및 함수  (0) 2017.10.11

+ Recent posts