목록Programming/Oracle (28)
Patrick's 데이터 세상
여러 ROW 의 데이터를 하나의 행으로 가져와야 할 때 사용하는 함수 select 컬럼1 , (select wmsys.wm_concat(컬럼) from ct_accession where 키값o=a.키값) 별칭 from 테이블 a 여러 row값을 하나의 행으로 가져오는데는 WM_CONCAT 함수 외에도 LISTAGG가 존재. (11g 에서 추가된 함수)
한번에 많은 건수를 insert하면 속도 문제가 있고, rollback 세그먼트에 대기하고 있는 건수가 너무 많아서 1000건 씩 나눠서 입력하는 insert pl/sql문 begin declare r int := 0; cursor c1 is select /*+ PARALLEL(a,4) */ rowid, 컬럼, 키값 from 인서트정보테이블; begin for x in c1 loop update 테이블 a set update대상컬럼 = substr(x.update입력컬럼, 1, 6) where 키값 =x.키값; --where x.rowid=rowid; -- 같은 테이블 업데이트인 경우 rowid 로.. r := r + 1; if mod(r, 1000) = 1 then commit; end if; end ..
테이블에서 xmltype의 컬럼이 있을 때, 그 컬럼의 값을 추출하기 위한 쿼리입니다. select extract(value(v), '/*').getRootElement() , extract(value(v), '/*/@display').getStringVal() , extract(value(v), '/*/text()').getStringVal() from 테이블 a, table(xmlsequence(extract(a.rule_value, '/value/*'))) v;

테이블에서 데이터가 입력된 시간을 따로 관리하고 있지 않을 때 timestamp 기능을 이용해서 데이터 입력, 수정 시간을 확인할 수 있습니다. SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM EMPLOYEE WHERE NAME='james'; #Result SCN_TO_TIMESTAMP를 활용해서 입력된 년/월/일 시/분/초 까지 확인할 수 있습니다. 단, SCN_TO_TIMESTAMP 함수는 변환 가능한 시간에 제약이 있는데 약 5일 미만입니다.
많은 건수를 반출할 때 디벨로퍼에 오류가 나는 경우가 있습니다. 쿼리 결과 값이 많을 때 나눠서 반출하는 방법으로는 rownum을 활용하는 방법이 있습니다. 1. 결과 값을 같은 기준으로 정렬합니다. 변하지 않는 고정 값인 rowid로 고정하여 정렬하겠습니다. rownum을 select 절에서 컬럼 추출을 하는데 다른 이름으로 지정해줍니다.(rm) select number , rownum rm from table order by rowid; 2. from절 안으로 select 절을 감싸줍니다. select number from (select number , rownum rm from table order by rowid ) 3. 조회하는 from절의 rownum(rm)을 토대로 조건을 잡아줍니다. sel..
데이터를 운용하다 보면 실수로 DELETE, UPDATE 하는 경우를 종종 겪게 됩니다. 이때 특정 시간 또는 시점으로 되돌릴 수 있는 기능이 Oracle Flashback 기능입니다. AS OF TIMESTAMP 구문을 활용하여 변경 전 데이터를 복원할 수 있습니다. ■ Flashback을 사용할 수 있는 조건 ※ 설정 1. 자동 언두 관리 시스템을 사용해야 합니다. - UNDO_MANAGEMENT 파라미터를 AUTO로 설정 UNDO_MANAGEMENT = AUTO 2. 이전의 어느 시점까지의 언두(UNDO) 정보를 보유하여 Flashback Query를 수행할 것인지 UNDO_RETENTION 파라미터를 설정해야 합니다. - ALTER SYSTEM SET UNDO_RETENTION=1200; 설정 확..