본문 바로가기

[Oracle] Pivot을 Decode로 변환 [Oracle] Pivot을 Decode로 변환 - 매번 생각해서 다시 하려고 하니 귀찮이즘 때문에 형식만 저장해놈- Oracle 11g 에서는 Pivot이 됨- Oracle 10g 이하용 V_COL1 VARCHAR2(10 CHAR); V_COLUMN VARCHAR2(2000 CHAR); V_COLUMN2 VARCHAR2(2000 CHAR); CURSOR Cursor명 IS SELECT Col1 FROM 테이블명; BEGIN OPEN Cursor명; LOOP FETCH Cursor명 INTO V_COL1; EXIT WHEN Cursor명%NOTFOUND; IF V_COLUMN = ' ' THEN V_COLUMN := 'MAX(DECODE(CODE, ' || V_COL1 || ',AMT )) AS "' |.. 더보기
[MSSQL] 다중 컬럼(multi column)에서 집계함수 MIN, MAX, SUM, AVG 처리 [MSSQL] 다중 컬럼(multi column)에서 집계함수 MIN, MAX, SUM, AVG 처리 SELECT Col1, Col2, Col3, Col4, Col5, ( SELECT MIN(Col) FROM ( VALUES (Col1), (Col2), (Col3), (Col4), (Col5) ) AS v (Col) ) AS Col_최소값, ( SELECT MAX(Col) FROM ( VALUES (Col1), (Col2), (Col3), (Col4), (Col5) ) AS v (Col) ) AS Col_최대값, ( SELECT AVG(Col) FROM ( VALUES (Col1), (Col2), (Col3), (Col4), (Col5) ) AS v (Col) ) AS Col_평균, ( SELECT SU.. 더보기
[ORACLE] Temp Table ( 임시테이블 ) - CREATE GLOBAL TEMPORARY TABLE [ORACLE] Temp Table ( 임시테이블 ) - CREATE GLOBAL TEMPORARY TABLE 1. 특징 1) 테이블 정의는 모든 세션에서 볼 수 있음 data는 세션별로 독립적, 즉 특정 세션 임시 테이블 data는 다른 session에서 접근할 수 없음 2) Data 유지기간a) ON COMMIT PRESERVE ROWS : SESSION 단위, 다른 Session에서 볼 수 없음, SESSION 종료 되면 사라짐. (MSSQL Temp Table과 유사)b) ON COMMIT DELETE ROWS : TRANSACTION 단위, COMMIT; 되는 시점에 자동으로 Data Delete 3) 각 세션에서 해당 Table 사용할 때 테이블 정의에 따라 메모리에 Table 구조 생성(임시.. 더보기
[Oracle] LOOP ~ CONTINUE [Oracle] 11g 이상 LOOP ~ CONTINUE : Oracle Database 11g Release 1에서부터 PL / SQL 키워드 - CONTINUE 이하는 다른 방법 사용 1. 11g 이상 DECLARE x NUMBER := 0; BEGIN LOOP -- After CONTINUE statement, control resumes here DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x)); x := x + 1; IF x < 3 THEN CONTINUE; END IF; /* 또는 CONTINUE WHEN x < 3; */ DBMS_OUTPUT.PUT_LINE ('Inside loop, after CONTINUE: x = ' || TO_CHA.. 더보기
[Oracle] Table Object 정보 보기 [Oracle] Table Object 정보 보기 1. Table Layout(테이블 스키마) SELECT A.TABLE_NAME,A.OWNER,NVL(C.COMMENTS, ' ') TABLE_DESC, A.COLUMN_ID, A.COLUMN_NAME, A.DATA_TYPE, CASE WHEN A.DATA_TYPE = 'NUMBER' AND A.DATA_SCALE = 0 THEN TO_CHAR(A.DATA_PRECISION) WHEN A.DATA_TYPE = 'NUMBER' AND A.DATA_SCALE > 0 THEN TO_CHAR(A.DATA_PRECISION) || ',' || TO_CHAR(A.DATA_SCALE) WHEN A.DATA_TYPE = 'DATE' THEN ' ' WHEN A.DATA.. 더보기
[Oracle] SYSDATE 기준 일자관련 다양한 표현 [Oracle] SYSDATE 기준 일자관련 다양한 표현 1. 표현 ---------------------------------------- -- 오늘날자 ---------------------------------------- SELECT SYSDATE FROM DUAL; --> 결과 : 18/04/15 (DATE TYPE) SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL; --> 결과 : 2018-04-15 23:27:01 ( CHAR TYPE ) ---------------------------------------- -- 오늘, 내일, 어제 ---------------------------------------- SELECT SYSDATE T.. 더보기
[Oracle] cursor 할당 [Oracle] cursor 할당 1. 선언부 1) PROCEDURE 선언부 CREATE OR REPLACE PROCEDURE where_current IS CURSOR emp_list IS SELECT empno,empname FROM emp BEGIN FOR rec in emp_list LOOP END LOOP OR LOOP .. EXIT WHEN emp_cv%notfound; .. END LOOP .... 2) 변수 DECLARE CURSOR c1 IS SELECT empno,empname FROM emp ORDER BY empno BEGIN .... 3) 매개변수 전달 DECLARE -- 매개변수 받기, 부서코드 CURSOR c1 ( p_deptid emp.deptid%TYPE ) IS SELEC.. 더보기
[Oracle] FOR LOOP [Oracle] FOR LOOP 참조 : https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/a_samps.htm#540 1. 단순 FOR LOOP DECLARE x NUMBER := 100; BEGIN FOR i IN 1..10 LOOP IF MOD(i,2) = 0 THEN -- i is even INSERT INTO temp VALUES (i, x, 'i is even'); ELSE INSERT INTO temp VALUES (i, x, 'i is odd'); END IF; x := x + 100; END LOOP; COMMIT; END; 2. CURSOR DECLARE CURSOR c1 is SELECT ename, empno, sal FROM emp .. 더보기
[MSSQL] SQL문 중간 오류시 처리 샘플(템플릿) [MSSQL] SQL문 중간 오류시 처리 샘플(템플릿) -- 임시로 확인 시 매번 만들기 귀찮아 미리 템플릿 만들어놈-- SP 아무런 의미 없다~~ ALTERPROCEDURE SP_ERROR_Test AS BEGIN INSERT INTO #TEMP1(Col1) VALUES (1) DECLARE@iINT = '가' --INSERT INTO #TEMP1(Col1) VALUES ('가') INSERT INTO #TEMP2(Col1) VALUES (2) END EXEC SP_ERROR_Test SELECT * FROM #TEMP1 SELECT * FROM #TEMP2 더보기
[Oracle] SYS_REFCURSOR 변수값 확인하기 [Oracle] SYS_REFCURSOR 변수값 확인하기 1. Variable 이용 CREATE OR REPLACE PROCEDURE MY_PROC( P_RC OUT SYS_REFCURSOR ) AS BEGIN OPEN P_RC FOR SELECT 1 COL1 FROM DUAL; END; / VARIABLE RC REFCURSOR; EXEC MY_PROC( :RC ); PRINT RC; 2. DBMS_OUT 이용 DECLARE V_CUR SYS_REFCURSOR; V_A VARCHAR2(10); V_B VARCHAR2(10); BEGIN YOUR_PROC(V_CUR); LOOP FETCH V_CUR INTO V_A, V_B; EXIT WHEN V_CUR%NOTFOUND; DBMS_OUTPUT.PUT_LI.. 더보기