반응형

grant all on schema 이름 to postgres;


grant select on all tables in schema 이름 to postgres;

반응형

'Postgresql' 카테고리의 다른 글

Postgresql 타입별 연산  (0) 2019.01.08
Postgresql LPAD() function  (0) 2019.01.08
ORACLE Postgresql 변환  (0) 2018.12.27
Postgresql 계층형 쿼리 구현 방법  (0) 2018.12.27
Postgresql과 Oracle 차이점  (0) 2018.12.27
반응형



▶ 오라클

SELECT 컬럼명
FROM 테이블명
START WITH 계층구조 시작 조건(루트 노드 식별)
CONNECT BY PRIOR 계층구조 상하위 조건(부모 자식 노드간의 관계)

SELECT A.CONTS_ID, 
             A.CONTS_NM,
             A.UP_CONTS_ID,
             A.MENU_ORD,
             LEVEL   /* 계층구조에서 단계레벨을 나타내주는 함수 */
FROM CLT_MENU A
WHERE A.MENU_INCL_YN = 'Y'
             AND LEVEL IN (2,4)
START WITH A.CONTS_ID = 'voc'   /* 계층구조의 시작조건을 주는 조건절 */ 
CONNECT BY PRIOR A.CONTS_ID = A.UP_CONTS_ID  /* 계층구조의 상,하위 간의 관계 조건 */
ORDER SIBLINGS BY A.MENU_ORD   /* 계층구조를 유지하면서 정렬해주는 구문 */

▶ PostgreSQL

WITH RECURSIVE  [view ] (보여주고 싶은 컬럼) as (
    
부모쿼리 작성데이터의 시작조건을 구하는 쿼리
    
lUNION ALL 
    
계층구조 작성, 하위 데이터를 찾아가기 위한 반복 쿼리
)
view 쿼리
 

WITH RECURSIVE CODE_LIST(CONTS_ID, CONTS_NM, UP_CONTS_ID, MENU_ORD, DEPTHPATHCYCLEas (
             /* 계층구조의 시작조건 쿼리 */
             SELECT A.CONTS_ID,
                           A.CONTS_NM,   
                           A.UP_CONTS_ID,
                           A.MENU_ORD,
                           1,
                           ARRAY[A.CONTS_ID::text],
                           false
             
FROM CLT_MENU A
             
WHERE A.CONTS_ID = 'voc'
                           
AND A.MENU_INCL_YN = 'Y'
            
 UNION ALL
             /*하위 데이터를 찾아가기 위한 반복조건 쿼리*/
            
 SELECT A.CONTS_ID,
                           A.CONTS_NM,   
                           A.UP_CONTS_ID,
                           A.MENU_ORD,
                           B.DEPTH + 1,
                           ARRAY_APPEND(B.PATH, A.CONTS_ID::text),
                           A.CONTS_ID = any(B.PATH)
             
FROM CLT_MENU A, CODE_LIST B
             
WHERE A.UP_CONTS_ID = B.CONTS_ID
                           
AND A.MENU_INCL_YN = 'Y'
                           
AND NOT CYCLE
)
/*View 쿼리*/
SELECT CONTS_ID, 
             CONTS_NM, 
             UP_CONTS_ID,
             MENU_ORD, 
             DEPTH AS A_MENU_LEVEL,
             PATH
FROM CODE_LIST
WHERE DEPTH IN (2,4)
ORDER BY PATH 

- CYCLE RECURSIVE를 통한 재귀 쿼리 수행 시 성능 상의 문제를 해결하기 위함
UNION ALL 다음의 반복조건 쿼리가 수행되면 CYCLE false이기 때문에 SELECT문이 수행 되고 검색된 자식 node ID 값이 배열(ARRAY[A.CONTS_ID::text])에 추가(ARRAY_APPEND(B.PATH, A.CONTS_ID::text).
- ANY(B.PATH) PATH 배열에 자신의 ID값이 있는 지를 검사하여이미 찾은 값에 대해서는 더 이상 데이터 검색을 수행하지 않도록 함. 
배열에는 DataType이 int, text인 형태만 담을 수 있으므로 배열에 담을 varchar타입의 컬럼 뒤에 ::text 를 붙여 형태를 변환 해줌.




출처 : https://m.blog.naver.com/wiseyoun07/221135850258





# 오라클(Oracel)


SELECT 컬럼명

FROM 테이블명

START WITH 계층구조 시작 조건(루트 노드 식별)

CONNECT BY PRIOR 계층구조 상하위 조건(부모 자식 노드간의 관계)


 

1
2
3
4
5
6
7
8
SELECT grp_id,
     (LPAD(' ', LEVEL) || grp_nm) as grp_nm,
     top_grp_id,
LEVEL /* 계층구조에서 단계, 레벨을 나타내주는 함수 */
FROM INFO_GROUP 
START WITH top_grp_id IS NULL   /* 계층구조의 시작조건을 주는 조건절 */
CONNECT BY PRIOR grp_id = top_grp_id /* 계층구조의 상,하위 간의 관계 조건 */
ORDER SIBLINGS BY top_grp_id ASC; /* 계층구조를 유지하면서 정렬해주는 구문 */

 





Postgresql


WITH RECURSIVE  [view 명] (보여주고 싶은 컬럼) as (
    부모쿼리 작성, 데이터의 시작조건을 구하는 쿼리
    union all 
    계층구조 작성, 하위 데이터를 찾아가기 위한 반복 쿼리, 
)
view 쿼리


 

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
WITH RECURSIVE search_group(grp_id, grp_nm, top_grp_id, level, grp_pathcycle) as (
    /* 계층구조의 시작조건 쿼리 */
    SELECT g.grp_id, 
            g.grp_nm, 
            g.top_grp_id, 
            0
            array[g.grp_id]
            false
    FROM "INFO_GROUP" g
    WHERE g.top_grp_id IS NULL 
    UNION ALL
    /*하위 데이터를 찾아가기위한 반복조건 쿼리*/
    SELECT g.grp_id, 
            g.grp_nm,
            g.top_grp_id, 
            level+1
            grp_path||g.grp_id
            g.grp_id = any(grp_path)
    FROM "INFO_GROUP" g, search_group sg
    WHERE g.top_grp_id = sg.grp_id 
    and NOT cycle
)
/*View 쿼리*/
SELECT grp_id, 
        lpad(' ',level) || grp_nm as grp_nm, 
        top_grp_id, 
        level, 
        grp_path
FROM search_group 
ORDER BY grp_path


cycle은 RECURSIVE를 통한 재귀 쿼리 수행 시 성능 상의 문제를 해결하기 위함


UNION ALL 다음의 반복조건 쿼리가 수행되면 

cycle이 false이기 때문에 SELECT문이 수행이 되고 검색된 자식 node의 ID 값이 배열에 추가(array[g.grp_id])


any(grp_path) 는 grp_path배열에 자신의 ID값이 있는 지를 검사하여, 

이미 찾은 값에 대해서는 더 이상 데이터 검색을 수행하지 않도록 함.





# Postgresql 결과

 

 



출처 : https://m.blog.naver.com/elren/220779694207


반응형

'Postgresql' 카테고리의 다른 글

Postgresql 타입별 연산  (0) 2019.01.08
Postgresql LPAD() function  (0) 2019.01.08
ORACLE Postgresql 변환  (0) 2018.12.27
Postgresql 스키마 권한  (0) 2018.12.27
Postgresql과 Oracle 차이점  (0) 2018.12.27
반응형


--sysdate
oracle : select sysdate from dual;
postgresql : select now();



--dual table
oracle : select 1,2 from dual;
postgresql : select 1,2;



--sequence
oracle : sequence_name.nextval
postgresql : nextval.sequence_name



--decode
oracle : decode(column1, val1, result1, ......, default)
postgresql : case columns1 when val1 then result1 .... else default END



--nvl
oracle : NVL(hire_date, SYSDATE) - 타입 불일치 시 묵시적 형변환 발생
postgresql : coalesce(hire_date, SYSDATE) - 컬럼타입 불일치 시 오류(상수는 OK)



--from절 subquery
oracle : select * from (select * from table_name);
postgresql : select * from (select * from table_name) as alias_name;



--outer join
oracle : select a.field1, b.field2 from a, b where a.item_id = b.item_id(+);
postgresql : select a.field1, b.field2 from a left outer join b on a.item_id = b.item_id;



--connected by
oracle : connected by
postgresql : with recursive



--CLOB
oracle : CLOB
postgresql : TEXT



-- 수치비교
oracle : 문자-숫자 비교시 묵시적 형변환 발생
postgresql : 문자-숫자 비교시 오류 발생

반응형

'Postgresql' 카테고리의 다른 글

Postgresql 타입별 연산  (0) 2019.01.08
Postgresql LPAD() function  (0) 2019.01.08
ORACLE Postgresql 변환  (0) 2018.12.27
Postgresql 스키마 권한  (0) 2018.12.27
Postgresql 계층형 쿼리 구현 방법  (0) 2018.12.27
반응형

1. 테이블 컬럼 추가하기(ALTER TABLE ADD)
[문법] ALTER TABLE 테이블명 ADD(컬럼명 데이타타입(사이즈));
( EX ) USER라는 테이블에 USER_NAME이라는 컬럼을 VARCHAR2(13) 타입으로 추가할 때
-> ALTER TABLE USER ADD(USER_NAME VARCAHR2(13)); 
 
2. 테이블 컬럼 수정하기(ALTER TABLE MODIFY)
[문법] ALTER TABLE 테이블명 MODIFY(컬럼명 테이타타입(사이즈));
( EX ) USER라는 테이블에 USER_AGE 라는 컬럼을 NUNBER(3) 타입으로 수정할 때
-> ALTER TABLE USER MODIFY(USER_AGE NUMBER(3));
 
3. 테이블 컬럼 삭제하기(ALTER TABLE DROP)
[문법] ALTER TABLE 테이블명 DROP COLUMN 컬럼명
( EX ) USER라는 테이블에 USER_NAME 라는 컬럼을 삭제할 때
-> ALTER TABLE USER DROP COLUMN USER_NAME;
 
4. 테이블 컬럼 이름 변경하기(ALTER TABLE RENAME)
[문법] ALTER TABLE 테이블명 RENAME COLUMN 원래컬럼명 TO 바꿀컬럼명;
( EX ) USER라는 테이블에 USER_NAME 이라는 컬럼을 USER_FIRST_NAME으로 변경할 때
-> ALTER TABLE USER RENAME COLUMN USER_NAME TO USER_FIRST_NAME;


출처: http://jwklife.tistory.com/5 [인 생]

반응형

'Oracle' 카테고리의 다른 글

오라클 월 처음&마지막 날짜 구하기  (0) 2019.04.25
해당 날짜의 일요일 구하기  (0) 2019.04.02
Oracle Characterset  (1) 2019.01.03
날짜 기간 조회  (0) 2018.12.27
오라클 랜덤으로 select 하기  (0) 2018.12.18
반응형

var loadDt = new Date(); //현재 날짜 및 시간   //현재시간 기준 계산

 alert(new Date(Date.parse(loadDt) - 30 * 1000 * 60 * 60 * 24)); //30일전
 alert(new Date(Date.parse(loadDt) - 15 * 1000 * 60 * 60 * 24)); //보름전
 alert(new Date(Date.parse(loadDt) - 7 * 1000 * 60 * 60 * 24)); //일주일전
 alert(new Date(Date.parse(loadDt) - 1 * 1000 * 60 * 60 * 24)); //하루전
 alert(new Date(Date.parse(loadDt) + 1 * 1000 * 60 * 60 * 24)); //하루후
 alert(new Date(Date.parse(loadDt) + 7 * 1000 * 60 * 60 * 24)); //일주일후
 alert(new Date(Date.parse(loadDt) + 15 * 1000 * 60 * 60 * 24)); //보름후
 alert(new Date(Date.parse(loadDt) + 30 * 1000 * 60 * 60 * 24)); //한달후

alert(new Date(Date.parse(loadDt) + 1000 * 60 * 60)); //한시간후
alert(new Date(Date.parse(loadDt) + 1000 * 60)); //1분후
alert(new Date(Date.parse(loadDt) + 1000)); //1초후

/ 날짜를 입력 하면 오늘 날짜로부터 숫자만큼 전날의 날짜를 mm/dd/yyyy 형식으로 돌려 준다.
function caldate(day){
 
 var caledmonth, caledday, caledYear;
 var loadDt = new Date();
 var v = new Date(Date.parse(loadDt) - day*1000*60*60*24);
 
 caledYear = v.getFullYear();
 
 if( v.getMonth() < 9 ){
  caledmonth = '0'+(v.getMonth()+1);
 }else{
  caledmonth = v.getMonth()+1;
 }
 if( v.getDate() < 9 ){
  caledday = '0'+v.getDate();
 }else{
  caledday = v.getDate();
 }
 return caledmonth+'/'+caledday+'/'+caledYear;

}

출처: http://blueskai.tistory.com/100 [blueskai]

반응형
반응형

WHERE  START_DATE <= 종료 날짜

AND     END_DATE >= 시작 날짜

반응형

'Oracle' 카테고리의 다른 글

오라클 월 처음&마지막 날짜 구하기  (0) 2019.04.25
해당 날짜의 일요일 구하기  (0) 2019.04.02
Oracle Characterset  (1) 2019.01.03
Oracle 테이블 컬럼 추가  (0) 2018.12.27
오라클 랜덤으로 select 하기  (0) 2018.12.18
반응형

Select * from( 
    select * from table
    order by DBMS_RANDOM.RANDOM 
) where rownum < 10;



반응형

'Oracle' 카테고리의 다른 글

오라클 월 처음&마지막 날짜 구하기  (0) 2019.04.25
해당 날짜의 일요일 구하기  (0) 2019.04.02
Oracle Characterset  (1) 2019.01.03
Oracle 테이블 컬럼 추가  (0) 2018.12.27
날짜 기간 조회  (0) 2018.12.27

+ Recent posts