Category Archives: Oracle

간단하게 테이블 백업하기 (백업 테이블 생성)

By | 11월 18, 2011

* 수정하기에 부담없는 개발DB서버나, 로컬에서 DB를 돌릴 때 테이블의 데이터를 백업하는 방법으로,    제약조건등은 복사되지 않고 칼럼형식과 데이터는 그대로 복사된 새 테이블을 만드는 방법이다.      CREATE TABLE AAA_20111118      AS SELECT * FROM AAA

오라클 프로시저/펑션 실행시 ORA-06508:호출 중인 프로그램 단위를 찾을 수 없습니다 오류.

By | 4월 15, 2011

* 내가 경험한 케이스 펑션 내에서 프로시저를 호출하는데 실행되지 않고 계속 위와 같은 에러가 났었다. 원인은 펑션이 호출하는 프로시저를, 펑션이 리컴파일 하려고 시도하는데, 그 리컴파일하는 액션이 펑션의 Exception 절로 빠져버렸기 때문이었다. 그래서 펑션의 Exception 절을 아예 제거해 버리니 잘 실행이 되었다.

오라클 날짜 비교 쿼리 예제 (초단위까지 비교)

By | 4월 11, 2011

* TO_DATE(), TO_CHAR()를 사용    – 이렇게 사용할 경우       – 인덱스를 타지 못하는 것 같다.       – 어떤 경우에 ‘지정한 월이 부적합합니다’ 오류가 뜬다 (데이터 문제가 있을 때 인듯…)         => 안좋잖아 … -_-?    SYSDATE BETWEEN TO_DATE(TO_CHAR(PLAN_START_TIME, ‘yyyymmdd’)||’000000′, ‘yyyymmddhh24miss’)  AND TO_DATE(TO_CHAR(PLAN_END_TIME, ‘yyyymmdd’)||’235959′, ‘yyyymmddhh24miss’) * TRUNC()를 사용          -… Read More »

오라클 sqlplus 콘솔에서 프로시저(Stored Procedure) 실행하기

By | 4월 6, 2011

SQL> 프롬프트에서… 1. 변수 정의 (IN 변수는 직접 기재해 주면 되므로 OUT변수만 정의) var outRESULT VARCHAR2(4000); var outROLE VARCHAR2(4000); var outMsgId VARCHAR2(4000); 2.  프로시저 실행       exec pck_tva_display.check_user_id_pw(‘ktboman’,’a12345678′,:outresult,:outrole,:outmsgid); 3. 결과값 보기       print  

[PL/SQL] JAVA에서 프로시저 호출시 Cursor is closed 에러

By | 3월 10, 2011

* 원인    – output 파라미터로 넘겨주는 커서 중 open되지 않은 것이 있을 때 발생      (ex : IF문으로 가려진 SELECT문장) * 대책    – output파라미터로 나가는 커서라면, 커서를 open하는 select문장을 반드시 수행되도록 한다.      (IF문 등으로 가리지 말 것)

PL/SQL 관련지식

By | 2월 23, 2011

*  SELECT INTO 변수… 에서 조회된 레코드가 없으면 PL/SQL은 Exception을 발생시킨다.     그래서 이런 경우에는 보통 같은 내용의 쿼리로 COUNT만 조회하는 쿼리를 추가해서 그 결과값이 0 이상이면     원래의 쿼리를 수행시키는 식으로 처리하기도 한다.    그러나 OPEN 커서 FOR SELECT…. 에서는 조회된 레코드가 없어도 Exception을 발생시키지 않는다. * PL/SQL Developer에서 PL/SQL실행시 Exception이 발생하는 정확한 지점을 찾고 싶을… Read More »

[펌글] Oracle10g – Xmlagg를 사용한 가로 Group by Query (여러개의 ROW를 하나의 칼럼으로 변환)

By | 2월 22, 2011

– 출처 : http://acidsound.blogspot.com/2007/10/oracle10g-xmlagg-group-by-query.html – C군의 질문 A | B —— A | 가 B | 가 C | 가 a | 나 B | 나 C | 다 일때 가 | ABC 나 | aB 다 | C 를 뽑아낼 수 없을까? 라고 하여 요렇게 조렇게 실험해봤음. 일종의 String Aggregation 인데 http://www.oracle-base.com/articles/10g/StringAggregationTechniques.php 이런 방법도 있지만 왠지 복잡하고 10g… Read More »

[펌글] Row결과값을 구분자를 통해서 칼럼으로 표현 (FUNCTION 작성)

By | 2월 21, 2011

– 출처 : http://blog.naver.com/byurynet/40057155699 –  create or replace function UT_GETJOIN /******************************************************************************    FUNCTION NAME : UT_GETJOIN    Description   : ROW 결과값을 구분자를 통해 컬럼으로 표현        > select UT_GETJOIN(CURSOR(select code_id from mold_mes_mcode where code_ty=’VSTAT’), ‘_’) from dual    > 1_2_3_B_C_        Parameter      p_cursor : cursor      p_del  : 컬럼 구분자… Read More »

ORA-06502 에러에 관하여…

By | 2월 14, 2011

1. 일반적으로 변수에 할당된 공간 이상의 데이터를 집어넣으려 할 때 발생한다. 2. 변수형(VARCHAR2, NUMBER…)이 적절하게 사용되지 않을 경우에도 발생한다. (경험상) 3. 프로시저 인수가 NUMBER 타입인데 VARCHAR를 넣었을 때도 발생한다. (경험상) * 참고 링크     ORA-06502: PL/SQL: numeric or value error: character string buffer too small — 에러 처리

[링크] ORA-24338: 문장 처리가 수행되지 않았습니다

By | 2월 12, 2011

– 출처 : http://blog.naver.com/hkjhc107/130097105093 – ORA-24338: 문장 처리가 수행되지 않았습니다   패키지 수행중 위와 같은 에러 발생   발생원인은 절차적으로 변수를 추출하고, 그 변수를 받아서 쿼리를 실행하는데   변수를 추출하는 부분에서 변수를 추출하지 못했거나,   2개 이상의 변수를 반환(후행 처리에서 하나만 필요로 하는 겅우에서)해서   쿼리가 제대로 수행되지 않아, 나오는 에러이다.   한문장씩 변수를 넣어, 검수를… Read More »

[PL/SQL] Dynamic SQL (동적,다이나믹 SQL) 구현 관련

By | 2월 12, 2011

* 설명 및 예제 링크       http://www.oracleclub.com/article/19612 * 주의사항    – make_sql() 같은 StringBuffer류의 프로시저에 SQL을 문자열로서 추가할 경우      => 꼭  프로시저를 만들 필요는 없고 String을 계속 붙여도 된다.        (1) 변하는 값 (키값) 등이 있을 경우             => 닶이 없다 -_-; 바인딩변수(ex – :p_user_name)  등으로 빼서          … Read More »

[펌글][오라클] first_value, last_value 함수를 사용하여 최고, 최저값 구하기

By | 3월 29, 2010

– 출처 : http://blog.naver.com/gseducation/20095625332 – * first_value 함수를 이용해서 최저 및 최고 구하기   select empno, ename, sal,        first_value(sal) over (order by sal) “최저”,        first_value(sal) over (order by sal desc) “최고” from emp order by sal;        EMPNO ENAME             SAL       최저       최고 ———- ———- ———- ———- ———-       7369 SMITH             800        800       5000      … Read More »

테이블내 같은값중 최근/과거값 구하기 (partition by)

By | 1월 27, 2010

– 출처 : 데이터베이스사랑 – 안녕하세요~ 질문좀 드립니다. A 테이블에 aaa bbb date 111 123 20091201 111 124 20091230 222 246 20100101 222 248 20100105 222 250 20100103 333 345 20081123 333 346 20091124 이렇게 있는데 aaa가 같은 값중 date가 생성일이 빠른거 / 나중인거 두가지 쿼리를 알고 싶습니다. 생성일이 빠른건 aaa bbb date 111 123 20091201… Read More »

[오라클] 오라클 9i 이상일 경우 무한로우 생성 쿼리

By | 1월 20, 2010

– 출처 : http://kr.blog.yahoo.com/nwisio1450/128 – 무한로우 생성 쿼리 입니다. Oracle 9i 일 경우 SQL>select * from         (select level from dual connect by level <= 10); Oracle 10g 일 경우 SQL>select level from dual connect by level <= 10 원하는 rows 만큼 level <= ? 숫자를 넣어주세요.. 이 쿼리는 상당히 유용합니다. 즉 예전에 copy_t 테이블로 사용하던 달력테이블이던지,… Read More »

[펌글] copy_ymd 테이블 생성하기

By | 1월 20, 2010

– 출처 : http://xamp.tistory.com/420 – — 1. copy_ymd를 생성 (일별) CREATE TABLE copy_ymd (ymd, ymd_date) AS SELECT TO_CHAR(TO_DATE(‘19591231′,’yyyymmdd’) + ROWNUM, ‘yyyymmdd’), TO_DATE(‘19591231′,’yyyymmdd’) + ROWNUM FROM (select * from row_100 a, row_100 b, row_100 c) — 어떻게든 36525 이상의 row를 갖게 하면 된다. WHERE ROWNUM <= 36525;   — 2. copy_ym을 생성 (월별) CREATE TABLE copy_ym (yyyymm,… Read More »

[펌글] rownum 으로 페이징 범위 지정을 해주고 싶을 때

By | 12월 31, 2009

– 출처 : http://webprogrammer.tistory.com/1103 – 오라클에서 rownum 은 쿼리가 실행될 때 결과 레코드에 번호를 나타내어 주는 필드이다. 물론 table 을 만들 때 rownum 을 만들어줄 필요는 없다. 어떠한 테이블이라도 “select rownum from boardtable” 의 형태로 쿼리를 날리면 레코드에 번호컬럼이 생기는 것을 볼수 있다. 따라서 페이징을 위한 쿼리에서 우리는 rownum 이 10 보다 크고 20 보다 작은… Read More »