본문 바로가기
반응형

Oracle48

order by 정렬후 특정 컬럼 최상위 값 조회(Keep(Dense_Rank First Order By C Desc)) 그림과 같이 C컬럼을 최고값으으로 정렬 한 후 그 최고값의 D를 조회할 때 다음과 같은 쿼리를 사용한다. Select Max(D) Keep(Dense_Rank First Order By C Desc) As D From Testtbl Where AA = '1111' 2018. 1. 2.
쿼리문 보기 좋게 정리해주는 사이트 보기 불편한 쿼리문 정리해서 보기 좋게 해주는 사이트 http://www.dpriver.com/pp/sqlformat.htm 2017. 12. 28.
여러행을 하나의 컬럼으로 합치기 row로 구성된 데이터를 하나의 column으로 합칠때는 다음과 같이 한다. SELECT WM_CONCAT(MSG_DATA) AS MSG FROM ( SELECT 'A : ' || aa || ', C : ' || aaa || ', E : ' || aaaa ||chr(13) || chr(10) AS MSG_DATA FROM TM_TEST WHERE 1=1 ) AA ; 예 합칠컬럼 합치고 난 후 조건절에 in에 쓸 코드가 필요할 때 응용 코드 SELECT WM_CONCAT(chr(39) || CUST_ID || chr(39)) FROM TM_TEST 2017. 10. 25.
Oracle cursor 오라클에서 커서 사용하는 SP 샘플 create or replace PROCEDURE TEST IS o_ZIP_CD VARCHAR2(7) := ''; o_ZIP_SEQ VARCHAR2(3) := ''; o_JIBUN VARCHAR2(500) := ''; o_JI_SIDO VARCHAR2(50) := ''; o_JI_SIGUNGU VARCHAR2(50) := ''; o_JI_DONG VARCHAR2(50) := ''; o_JI_RI VARCHAR2(50) := ''; o_JI_OTHER VARCHAR2(300) := ''; ERR_USER_EXCEPTION EXCEPTION; BEGIN FOR C1 IN ( SELECT B.BRAN_CD , A.C09 AS ADDR FROM TEMP a , TEMP1 b .. 2017. 9. 13.
PROCEDURE에서 변수 값 보기 print PROCEDURE에서 변수의 값의 상태를 보기 위해서는 다음과 같이 하면 된다. dbms_output.put_line (V_SALES_CD || '-' || V_BRAN_CD); 2017. 7. 10.
FUNCTION SAMPLE 오라클 펑션 샘플 create or replace FUNCTION UFUN_MAP_RETURN ( I_CD IN VARCHAR2, I_USE_YN IN VARCHAR2 ) RETURN VARCHAR2 IS tmpVar VARCHAR2(4); BEGIN tmpVar := ''; SELECT CD INTO tmpVar FROM TM__MAP WHERE ID = I_CD AND NOW_USE_YN = I_USE_YN; RETURN tmpVar; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END UFUN_MAP_RETURN; 2017. 7. 6.
rank()를 사용하여 순위를 부여하기 전체에서 순위 또는 전체의 특정 파트에서 순위등을 부여해야할 때 다음과 같이 RANK와 PATITION BY를 사용한다. SELECT user_no , user_nm , part_cd , pay , RANK() OVER (ORDER BY pay DESC )--전체에서 순위를 부여하고 , RANK() OVER (PARTITION BY part_cd ORDER BY user_no, part_cd ASC)--부서에서 순위를 부여한다. FROM PAY; 2016. 8. 4.
Oracle 이전 이후의 Row중 특정한 열 값(이전값, 이후값) 어떤 특정한 날짜 보다 바로 앞에 날짜 또는 바로 뒤에 날짜를 조회 해야 할 때 다음과 같이 LAG 이전 값LEAD 이후 값 함수를 사용한다. SELECT LAG(NOW_DATE) OVER (ORDER BY NOW_DATE) AS BEFORE_DATE , NOW_DATE , LEAD(NOW_DATE) OVER (ORDER BY NOW_DATE) AS NEXT_DATE FROM TEMP_TBL ORDER BY NOW_DATE 추가 함수의 설명 lag(컬럼명,행수[,null일 때 보여질 기본값]) : 특정 컬럼의 지정한 숫자의 이전 행의 데이터 반환lead(컬럼명,행수[,null일 때 보여질 기본값]) : 특정 컬럼의 지정한 숫자의 다음 행의 데이터 반환 사용예 LAG(DT, 1, '20160101') OV.. 2016. 7. 7.
두시간의 차이를 구한다. 디비에 저장되어 있는 두개의 시간읠 비교하여 분단위로 조회한다. SELECT TO_NUMBER(SUBSTR(DIFF, 2, 9)) DD , TO_NUMBER(SUBSTR(DIFF, 12, 2)) HH , TO_NUMBER(SUBSTR(DIFF, 15, 2)) MM , TO_NUMBER(SUBSTR(DIFF, 18, 2)) SS , DECODE( TO_NUMBER(SUBSTR(DIFF, 12, 2)), 0, SUBSTR(DIFF, 15, 2), (TO_NUMBER(SUBSTR(DIFF, 12, 2)) * 60) + TO_NUMBER(SUBSTR(DIFF, 15, 2))) AS HHplusMM --시간 분을 분으로만 표현 FROM ( SELECT NUMTODSINTERVAL (DATE2 - DATE1, 'D.. 2016. 5. 16.
최근 일자별로 한건씩 조회할 때 예를 들어 접속자 로그를 접속할 때마다 남긴다고 하였을 때, 접속자별로 최근 접속일을 한건씩 나오게 조회하고 싶을 때 SELECT A.접속자 , MAX(B.방문일) FROM 접속자(사용자)테이틀 A , 로그 테이블 B WHERE A.접속자 = B.접속자 GROUP BY A.접속자 2016. 5. 13.
Oracle 테이블, 컬럼 정보 조회 쿼리 Oracle에서 테이블이나 컬럼이름 코멘트 등등을 조회해서 보고 싶을 때 다음 쿼리를 사용하면 된다. --대상 테이블의 컬럼 정보를 조회 SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'table name'; -- 대상테이블 코멘트 조회 SELECT * FROM ALL_TAB_COMMENTS WHERE TABLE_NAME = 'table name' --테이블 조회 SELECT * FROM ALL_ALL_TABLES; 2016. 5. 10.
특정구분자로 구성된 문자열을 ROW로 변환하기(SPLIT) 2 특정 문자로 구문된 문자열을 row으로 변환할 때 다음 코드를 사용 할 수 있다. Package로 만들어서 사용하면 다음과 같다. 사용 예 SELECT COLUMN_VALUE FROM TABLE(COMNON_PKG.FN_RowByColumn(',' || RawData)) 패키지로 만들 코드 FUNCTION FN_RowByColumn(in_List IN VARCHAR2) RETURN Ty_VC2_Tab PIPELINED IS v_Result VARCHAR2(2000); v_First NUMBER := 0; v_Second NUMBER := 0; BEGIN BEGIN IF SUBSTR(in_List, 1, 1) ',' THEN v_Result := ',' || in_List; ELSE v_Result := .. 2016. 3. 3.
[Query] FOR LOOP FOR LOOP FOR x IN ( WITH KEY_INFO AS ( SELECT ADD_MONTHS(TO_DATE(P_REQ_DT,'YYYYMMDD'),-1) REQ_DT FROM DUAL ) SELECT CLS_DT FROM ( SELECT TO_CHAR(REQ_DT + LEVEL,'YYYYMMDD') CLS_DT FROM KEY_INFO CONNECT BY LEVEL 2016. 1. 8.
특정구분자로 구성된 문자열을 row로 변환하기(split) 1 데이터베이스에 다음과 같은 키('111,222,333,444,555')를 던져주고 row로 변환하여 다른 테이블과 join, insert 등의 작업을 할 때 사용한다. SELECT REGEXP_SUBSTR('111,222,333,444,555','[^,]+', 1, LEVEL) FROM DUAL CONNECT BY INSTR('111,222,333,444,555', ',', 1, LEVEL - 1) > 0 응용1다른 테이블의 테이터와 join 하여 insert를 할 때 INSERT INTO TB_ITEM_FILE ( ITEM_CD, FILE_ID, ) SELECT P_ITEM_CD, A.FILE_ID, FROM TB_COM_FILE_INFO A , ( SELECT REGEXP_SUBSTR('111,222.. 2016. 1. 8.
CONNECT BY LEVEL, 순번을 딸 때 위 와 같은 데이터가 필요할 때, 사용하는 방법은 여러가지가 있다. 데이터 건수 많은 테이블을 조회하던가, 아니면 CONNECT BY LEVEL을 사용하던가...일반적으로 위와 같은 데이터를 만들 때 다음 코드를 사용한다. 날짜를 응용하면 1일부터 말일까지 출력하는 등 다양하게 응용 할 수 있다. SELECT LEVEL AS Num FROM DUAL CONNECT BY LEVEL 2016. 1. 8.
output변수 로 테이블 복수개 조회 procedure GetMethod(ProjectCode in varchar2 ,out_Cursor1 out sys_refcursor ,out_Cursor2 out sys_refcursor) is begin open out_Cursor1 for select AA ,BB ,CC ,DD ,EE ,FF from t_table1 where Proj_Cd = ProjectCode order by Evlt_Ordr; open out_Cursor2 for select AA ,CC ,DD ,GG ,HH from t_table2 where Proj_Cd = ProjectCode; end; 2015. 12. 4.
파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다. 파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다. Oracle.DataAccess를 사용했다면, Oracle.DataAccess의 버전이 32bit일 경우 IIS도 32bit로 해주어야 한다. 응용 프로그램 풀 > 고급설정 >32비트 응용프로그램 사용 > true 로 변경iisreset하고 다시 접속해본다. Oracle은 세팅이 반이구나.. 젠장. 2015. 10. 22.
'Microsoft.Practices.EnterpriseLibrary.Data.OdpNet.OracleDatabase'의 형식 이니셜라이저에서 예외를 Throw했습니다. .net Enterprise 기반에서 to Oracle 11g로 접속 할 때 다음과 같은 에러 메세지 발생시'Microsoft.Practices.EnterpriseLibrary.Data.OdpNet.OracleDatabase'의 형식 이니셜라이저에서 예외를 Throw했습니다. 다음 파일을 같이 배포해준다. *클라이언트가 설치되어 있다면 그 안에 다 있음.oci.dllociw32.dlloraociei11.dllOraOps11w.dllOracle.DataAccess.dll 그리고 아래 경로의 D:\app\XXXXX2\product\11.2.0\client_1\network\admintnsnames.ora 파일의 서비스 이름도 맞추어 준다. 2015. 10. 22.
오라클, 서버 정보 보기 쿼리 오라클 버전 정보 확인하기SELECT * FROM V$VERSION 오라클 서버 정보 확인하기select dbms_utility.port_string from dual; 2015. 10. 20.
Oracle.DataAccess.Client.OracleException ORA-12154: TNS:지정된 접속 식별자를 분석할 수 없음 위 메세지는 TNS가 정의되지 않아서 발생한 오류임. TNS 설정을 하고, 환경설정 파일도 설정해야된다. Path : ;D:\app\XXXX\product\11.2.0\client_1; (맨마지막에 추가한다.)TNS_ADMIN : D:\app\XXXX\product\11.2.0\client_1\network\adminORACLE_HOME : D:\app\XXXX\product\11.2.0\client_1 경로는 oracle 설치경로에 따라 다 다르다.위와 같이 설정하면 된다. TNS 정보를 web.config에 넣어 놓고 호출하면 위와같은 작업을 하지 않아도 된다. 2015. 10. 20.
Oracle.DataAccess.Client.OracleParameter'의 형식 이니셜라이저에서 예외를 Throw했습니다. Oracle.DataAccess.Client.OracleParameter'의 형식 이니셜라이저에서 예외를 Throw했습니다. {System.TypeInitializationException: 'Oracle.DataAccess.Client.OracleParameter'의 형식 이니셜라이저에서 예외를 Throw했습니다. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client 위치: Oracle.DataAccess.Client.OracleInit.Initialize()위치: Oracle.DataAccess.Client.OracleParameter..cctor()--- .. 2015. 10. 20.
[TOOL] 사용법 테이블 편집 http://www.thatjeffsmith.com/archive/2013/06/sql-developer-im-looking-at-a-record-how-do-i-edit-it/ 2015. 7. 31.
[Query] Oracle procedure, function select SELECT * FROM user_source WHERE 1=1 AND NAME IN ( SELECT DISTINCT OBJECT_NAME FROM user_objects WHERE OBJECT_TYPE = 'PROCEDURE' ) ORDER BY NAME, LINE ASC ; select * from user_objects where object_type = 'PROCEDURE'; select * from user_source where NAME = CLT_MST_U' object_type 종류 INDEX PARTITION SEQUENCE TABLE PARTITION SCHEDULE PROCEDURE LOB PACKAGE PACKAGE BODY PROGRAM TRIGGER VIEW INDEX TABLE.. 2015. 7. 31.
[QUERY] 테이블에 있는 데이터 변수에 넣기 select name1, name2 into v_name1, v_name2 from TBL_SAMPLE where key = 'test'; 2015. 7. 31.
[Query] Merge Into(다량의 건 일괄로) MERGE INTO TB_ATTB T USING( SELECT A.REQ_NO , B.TEST_RST , 'Y' USE_YN , '0' INST_ID , SYSDATE INST_DS , '0' UPDT_ID , SYSDATE UPDT_DS FROM TB_MST A , TB_DTL B WHERE 1=1 AND A.REQ_NO = B.REQ_NO AND B.ITEM_CD IN ('S0B70', 'S0B710') AND A.REQ_DT BETWEEN '20130726' AND '20130825' ) S ON (S.REQ_NO = T.REQ_NO AND S.ATTB_ID = T.ATTB_ID) WHEN MATCHED THEN UPDATE SET T.ATTB_VAL = S.TEST_RST , T.USE_YN = .. 2015. 7. 31.
[Sample] Left outer join 비교 SELECT c.REQ , a.CD , a.NM , b.VAL , a.TYP , a.DIV FROM TB_ATTB_MST a LEFT OUTER JOIN TB_ATTB b ON a.CD = b.ID AND b.NO = '1321313810199' LEFT OUTER JOIN TB_MST c ON b.NO = c.NO AND c.NO = '1321313810199' where TYP = 02' ; SELECT b.REQ , a.CD , a.NM , b.VAL , a.TYP , a.DIV FROM TB_ATTB_MST a ,TB_ATTB b WHERE a.CD = b.ID(+) AND a.TYP = 02' AND b.REQ(+) = '1321313810199' 2015. 7. 31.
[Sample] Pivot, multi pivot SELECT REQ_NO , CENT_CD , SPCM_COL_DM , BLD_NM , ZIP_CD , ADDR , ADDR_DTL FROM ( ) PIVOT( MAX(ATTB_VAL) FOR ATTB_ID IN ( 'CENT_CD' AS HEL_CENT_CD , 'SPCM_COL_DM' AS SPCM_COL_DM , 'BLD_NM' AS BLD_EQMT_NM , 'ZIP_CD' AS PAT_ZIP_CD , 'ADDR' AS PAT_ADDR , 'ADDR_DTL' AS PAT_ADDR_DTL ) ) select * from t1 pivot xml ( sum(c3) for c2 in (any) ) ; select * from t1 pivot xml ( sum(c3) for c2 in (select dist.. 2015. 7. 31.
[SQL Developer] 단축키 Worksheet SQL 워크시트(W) Alt-F10 Worksheet 계획 설명(E)... F10 Worksheet 내역(H) F8 Worksheet 롤백(R) F12 Worksheet 명령문 실행 F9 Worksheet 명령문 실행 Ctrl-Enter Worksheet 비공유 SQL 워크시트 Ctrl-Shift-N Worksheet 스크립트 실행 F5 Worksheet 자동 추적(A)... F6 Worksheet 지우기(C) Ctrl-D Worksheet 커밋(O) F11 검색 다음 찾기(N) F3 검색 바꾸기...(R) Ctrl-R 검색 이전 찾기(P) Shift-F3 검색 증분 뒤로 찾기(B) Ctrl-Shift-E 검색 증분 앞으로 찾기(O) Ctrl-E 검색 찾기...(F) Ctrl-F 검색 .. 2015. 7. 31.
[Query] Insert with INSERT WITH INSERT INTO TB_ACC_OUT_CLS(CLS_DT, OUT_CST_CD, SC_CD, CST_CD, ITEM_CD ) WITH VI_CLS AS( SELECT A.REQ_DT , A.OUT_CD , B.SB_CD , B.CST_CD , A.ITEM_CD , SUM(1) REQ_CNT , SUM(NVL(A.TEST_AMT,0)) REQ_AMT , SUM(NVL(A.STU_AMT,0)) OUT_REQ_AMT FROM TB_DTL A , TB_MST B , TB_ITEM E , TB_OUT F WHERE A.REQ_NO = B.REQ_NO AND A.ITEM_CD = E.ITEM_CD AND E.STR_DT = TO_CHAR(SYSDATE,'YYYYMMDD') GROUP BY .. 2015. 7. 31.
SQL Developer 접속시 IP접속시 TNS사용시 ora 파일 2015. 7. 29.
반응형