Study/SQL. 8

[Oracle]여러로우 한줄로 붙이기(LISTAGG)

엑셀로 생각을하면 여러줄에 있는 결과값을 CONCATENATE함수를 써서 구분자를 추가하여 붙여넣는데 오라클도 같은 기능이있다. 오라클 11g에서는 wm_concat이 있으나19c에서는 사용 불가? 하기때문에 오라클 버전이 변경되면 해당함수를 찾아 변경해야한다. listagg를 몰랐을땐 피벗으로 좌표값처럼 가져와서 붙였는데 너무편한기능이지만 아마 오라클9i부터 지원하는 것으로 알고있어서 옛유물사이트에선 지원하지 않을수도 있으니 db버전을 확인하자. 그럼 사용법은 LISTAGG(DISTINCT deptno, ',') WITHIN GROUP(ORDER BY deptno)​WITH TAB AS ( SELECT '10' COL FROM DUAL UNION ALL SELECT '20' COL FROM DUAL U..

Study/SQL. 2024.01.22

[Oracle] 최근 삭제한 테이블 복구(FLASHBACK)

오렌지로 DB 테이블에 컬럼 추가하려고 툴 내의 기능인 Alter table을 하였는데, 컬럼 추가 버튼을 누른다는게 Drop table을 누르고 확인을 눌러버렸다.. 개발 DB라 다행이지.. 물론 운영 DB는 권한조차없지만 .. 순간 당황해서 5초정도 멍때리다가 어떻게 해야하지 하고 오라클의 기능중 Timestamp를 썼는데 Drop된 테이블은 Timestamp가 동작하지 않았다 그래서 어떻게하지 검색을 했고 다행히 Flashback이라는 기능이 있어서 해결!! 실수로 테이블 날렸을때 진땀흘리지말고 당황하지말고 FLASHBACK TABLE '테이블명' TO BEFORE DROP

Study/SQL. 2024.01.17

[Oracle] 최근 변경 데이터 조회(Timestamp)

- 오라클 운영시에 실수로 데이터를 삭제,업데이트 하는 경우에 commit을 하면 데이터 복구가 힘들 수 있다. 이 때, 좋은 기능을 소개하려고 한다. - Oracle 9i부터 지원하고, 운영하는 DB의 최대 백업 시간 설정에 따라 그시간 까지 복구가 가능하다. - 학교에서 일할때는 91시간까지 설정이 되어있었는데 현회사는 72시간정도인듯..? - 이 이상 지난 데이터에 대해서 복구를하려면 오라클업체를 불러서 큰금액을 지출하고 복구를 해야한다.. - 그래서 회사 이직때 처음하는게 timestamp와 테이블 찾기편한 select * from all_tab_columns부터 실행해본다..-- 10초전 데이터 조회 SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERV..

Study/SQL. 2024.01.17

프로그래머스 SQL Lv.1모든레코드 조회하기

1.모든 레코드 조회하기 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID; 2.역순 정렬하기 SELECT NAME ,DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC; 3.아픈 동물 찾기 SELECT ANIMAL_ID,NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'SICK' ORDER BY ANIMAL_ID; 4.어린 동물 찾기(INTAKE_CONDITION = 'AGED') SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION !='AGED' ORDER BY ANIMAL_ID; 5.동물의 아이디와 이름 SELECT ANIMAL_ID,NAME ..

Study/SQL. 2022.07.11

오라클 에러 ORA-00997, ORA-00932

1.원인발생 서로 컬럼의 크기가 다른 LONG RAW 타입의 데이터를 인서트 or 업데이트 할 때 발생 LONG RAW 타입은 이미지를 저장하거나, 대용량의 데이터를 저장할때 사용. 2.해결방법 step1. 데이터를 넣을 테이블의 정보를 확인 일반적인 desc table명; 으로는 타입만 보인다. 평범한 타입이면 상관이없으나, 이미지 저장이나 대용량 저장을 위한 LONG RAW타입은 할당 된 데이터의 크기를 알지못하므로 테이블 스크립트를 통해 할당된 용량을 확인. step2. 쉬운 케이스 (BLOB 컬럼이 COLUMN_B, COLUMN_D) 1)INSERT INTO TABLE_A(COLUMN_A,COLUMN_B) SELECT COLUMN_C, TO_LOB(COLUMN_D) FROM TABLE_B 2)IN..

Study/SQL. 2021.09.07

쓸때마다 찾아봐서 결국 적어놓는 쿼리

1. MERGE - 있으면 UPDATE 없으면 INSERT - 방법은 하기 나름이지만 PL/SQL사용시 BEGIN UPDATE TABLE_NAME SET NAME = '철수' ,AGE = '20' WHERE NAME = '철수' AND AGE = '20' IF SQL%NOTFOUND THEN INSERT INTO TABLE_NAME(NAME,AGE) VALUES( '철수', '20'); END IF; END; --세미콜론 꼭꼭 확인 - 오라클에서 제공하는 merge 1)본인테이블에 있는지 확인하고 입력할 때 MERGE INTO TMP_PKM_01 A USING DUAL --DUAL본인테이블일 때 ON ( A.DATA1='53') --DATA1에 53이라는게 있는지 조건입력 WHEN MATCHED THEN..

Study/SQL. 2021.07.28
반응형