[oracle] Windows 7 과 oracle, Toad

프로그래밍/DB 2011. 3. 9. 13:34 Posted by galad
64bit 윈도우즈 7에 오라클 10g 64bit를 설치하고 Toad 9.5를 깔았더니 토드가 오라클을 인식 못 해...
구글링 결과 토드가 64bit 오라클을 못 찾는다고... 레지스트리 변경해서 인식하게 해주는 방법도 있으나 여러모로 불안정해보여서
그냥 32bit 오라클을 설치...
http://likebnb.tistory.com/79

추가적으로 윈도우즈7에 오라클 10g 설치 시 지원하지 않는 운영체제?라는 메시지와 함께 오라클 설치가 불가능.
오라클 설치용 설정파일 수정 필요
http://guisin.net/69

설치 대상 시스템에 윈도우즈7을 추가하는 것

'프로그래밍 > DB' 카테고리의 다른 글

[Tool] 토드 폰트 변경하기  (0) 2010.11.19
[oracle] SELECT 를 사용한 UPDATE 3  (0) 2010.09.14
[oracle] select 문을 이용한 update 2  (0) 2010.08.16
[SQLite] Command Line Shell For SQLite  (0) 2010.05.24
[SQLite] Quick Start  (1) 2010.05.24

[oracle] SELECT 를 사용한 UPDATE 3

프로그래밍/DB 2010. 9. 14. 14:42 Posted by galad
UPDATE /*+ bypass_ujvc */
(
    SELECT
        CONTENT_ID,
        HDV_YN,
        META18 AS META_HDV_YN
    FROM
    (
        SELECT
            A.CONTENT_ID
            ,CASE
                WHEN COUNT(B.META02) > 0 THEN 'Y'
                ELSE 'N'
            END AS HDV_YN
            ,C.META18
        FROM
            SUB_CONTENT_META A, SUB_CONTENT_META_EXTEND B, CONTENT_META_EXTEND C
        WHERE
            A.SUB_CONTENT_ID = B.SUB_CONTENT_ID
            AND A.CONTENT_ID = C.CONTENT_ID
            AND B.META02 = 'PD009703'
    --        AND    A.CONTENT_ID = ''
        GROUP BY
            A.CONTENT_ID, C.META18
    )
)
SET META_HDV_YN = HDV_YN

CONTENT_META_EXTEND 의 컬럼을 업데이트하고 싶은데 위와 같이 안쪽(?)에서 뷰를 만들 때 같이 조인해버리면
"가상 열은 사용할 수 없습니다" 라는 에러가 난다.

아래처럼 실제 데이터 넣을 컬럼은 가장 외부로 뺄 것
참고: http://database.sarang.net/?inc=read&aid=35544&criteria=oracle&subcrit=&id=36136&limit=20&keyword=&page=50

[가상 Table에 정보를 저장(Insert) 하거나 변경(update)를 수행할 수 없지요

즉, UPDATE (SELECT....)

SELECT 부분이 실 Table이어야만 하지 Select된 결과에 대한 것은 변경이나 저장을

할 수 없는 것이지요.

따라서 Select 부분을 조건절로 보내고, 실 Table을 정의하시면 됩니다.]


UPDATE /*+ bypass_ujvc */
(
    SELECT
        T.CONTENT_ID,
        T.HDV_YN,
        C.META18 AS META_HDV_YN
    FROM
    (
        SELECT
            A.CONTENT_ID
            ,CASE
                WHEN COUNT(B.META02) > 0 THEN 'Y'
                ELSE 'N'
            END AS HDV_YN
        FROM
            SUB_CONTENT_META A, SUB_CONTENT_META_EXTEND B
        WHERE
            A.SUB_CONTENT_ID = B.SUB_CONTENT_ID
            AND B.META02 = 'PD009703'
            AND    A.CONTENT_ID = '0000024061'
        GROUP BY
            A.CONTENT_ID
    ) T, CONTENT_META_EXTEND C
    WHERE
        T.CONTENT_ID = C.CONTENT_ID
)
SET META_HDV_YN = HDV_YN;


'프로그래밍 > DB' 카테고리의 다른 글

[oracle] Windows 7 과 oracle, Toad  (0) 2011.03.09
[Tool] 토드 폰트 변경하기  (0) 2010.11.19
[oracle] select 문을 이용한 update 2  (0) 2010.08.16
[SQLite] Command Line Shell For SQLite  (0) 2010.05.24
[SQLite] Quick Start  (1) 2010.05.24

UPDATE /*+ bypass_ujvc */

(

           SELECT A.CATEGORY_ID

           FROM DEPLOY_PRODUCT_CATEGORY A, PRODUCT_INFO B

           WHERE A.CATEGORY_ID LIKE '%DP070%'

                     AND A.PRODUCT_ID = B.PRODUCT_ID

                     AND B.STATUS LIKE '6%'

)

SET CATEGORY_ID = 'XXXXXXXX';

/*+ bypass_ujvc */ 이 부분 필수임.

다음과 같이 SELECT에서 2개의 컬럼을 가져다가 넣는 것도 가능

update /*+ bypass_ujvc */

(
   select e.PRODUCT_ID, e.PROD_DESC o_PROD_DESC,f.PROD_DESC N_PROD_DESC
   from (
     select b.CHANNEL_ID,c.PRODUCT_ID,max(d.PROD_DESC) PROD_DESC
     from PRODUCT_INFO a, PRODUCT_CATEGORY b, PRODUCT_INFO c, TBL_DP_PROD d
     where a.CONTENT_TYPE='09'
       and a.PRODUCT_ID = b.CHANNEL_ID
       and b.PRODUCT_ID = c.PRODUCT_ID
       and b.PRODUCT_ID <> b.CHANNEL_ID
       and b.CHANNEL_ID = d.PROD_ID
    group by b.CHANNEL_ID,c.PRODUCT_ID
  ) e, TBL_DP_PROD f
  where e.PRODUCT_ID = f.PROD_ID

    and f.PROD_DESC is null
)

set N_PROD_DESC = o_PROD_DESC



http://zmzm.tistory.com/302


sqlplus 에서 아래와 같은 방식으로 처리한다.

set echo off
set null @
set pages 0
set colsep ','
set trimspool on
set linesize 30000
set termout off

spool 파일명.csv;

select * from tablename ;

spool off;

ps. 근데 컬럼사이즈만큼 공백 생기는 건 어떻게 처리 안되나???

'프로그래밍 > DB' 카테고리의 다른 글

[SQLite] Command Line Shell For SQLite  (0) 2010.05.24
[SQLite] Quick Start  (1) 2010.05.24
[oracle] ' 포함한 쿼리  (0) 2010.04.09
[oracle] select 문을 이용한 update  (0) 2010.03.08
[oracle] 제약조건 확인하기  (0) 2010.02.25

[oracle] 제약조건 확인하기

프로그래밍/DB 2010. 2. 25. 18:26 Posted by galad
SELECT  SUBSTR(A.COLUMN_NAME,1,15) COLUMN_NAME,
               DECODE(B.CONSTRAINT_TYPE,
                                         'P','PRIMARY KEY',
                        'U','UNIQUE KEY',
                      'C','CHECK OR NOT NULL',
                                        'R','FOREIGN KEY') CONSTRAINT_TYPE, 
              A.CONSTRAINT_NAME   CONSTRAINT_NAME    
        FROM  USER_CONS_COLUMNS  A,  USER_CONSTRAINTS  B  
        WHERE  A.TABLE_NAME = UPPER('&table_name')  
            AND  A.TABLE_NAME = B.TABLE_NAME  
            AND  A.CONSTRAINT_NAME = B.CONSTRAINT_NAME  
        ORDER BY 1;  

'프로그래밍 > DB' 카테고리의 다른 글

[oracle] ' 포함한 쿼리  (0) 2010.04.09
[oracle] select 문을 이용한 update  (0) 2010.03.08
[Toad] tab 간격 조정하기  (0) 2010.02.02
[ORACLE] 특수문자 입력  (0) 2009.10.21
[Oracle] Toad 단축키  (0) 2009.08.22

[ORACLE] 특수문자 입력

프로그래밍/DB 2009. 10. 21. 16:59 Posted by galad
출처: http://munduki.tomeii.com/darkhorse/entry/ORACLE-%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90-%EC%9E%85%EB%A0%A5

set escape on

UPDATE TBL_US_MEMBER_BPINFO SET BP_EMAIL_AUTH_URL = 'http://idp.nate.com/web/JC.mail?q=64adff31fc80c86f8991a90bf0cad011c5e364370f1b45a4b2bca822d7683c3135628ec969ef57352f3e9b0e429db66b1c7ff0d7adeef4d42f6bcedbc96b63d3085d0fcef961826ed2a963f304d4efbb3af99ad07da28057c835683cdf48ad219de23d21376576530539089db264d3602fdc44908d3e98e45c9c03ec7e67e1d82c0c91a0ed61366508ffd5fb4acba40dce8400621d77af8ca051a7d5a28144e33bf10b78dcf3a79384f7365a47d49fdc3f25466e6e5d360544d4e472c3da8ac9\&\&resp_url=http%3A%2F%2Fbp.tstore.co.kr%2Fbppoc%2Fmember%2FidpEmailAuth.omp'

set escape off

'프로그래밍 > DB' 카테고리의 다른 글

[oracle] 제약조건 확인하기  (0) 2010.02.25
[Toad] tab 간격 조정하기  (0) 2010.02.02
[Oracle] Toad 단축키  (0) 2009.08.22
[oracle10g] 페이징 시 rownum 사용하기  (0) 2009.04.06
[Oracle] [펌] sqlplus 사용법  (0) 2009.03.24
맨날 까먹어서 맨날 다시 만든다...

SELECT rownum AS rn, A.num, A.status
FROM
  (
    SELECT num, status FROM bp_test1 WHERE status != 'D' ORDER BY status ASC, num ASC
  ) A
WHERE rn >= 1 AND rn <= 10

이건 안됨. rn을 못찾는군...

SELECT rownum, A.num, A.status
FROM
  (
    SELECT num, status FROM bp_test1 WHERE status != 'D' ORDER BY status ASC, num ASC
  ) A
WHERE rownum >= 1 AND rownum <= 10

이건 되는군.

근데 웃기는건 WHERE 절을 rownum >= 2로 하면 데이타가 없다. 꼭 2가 아니라 2 이상으로 하면 안나온다.

찾아보니
rownum이 1보다 크다는 조건은 항상 거짓이 됩니다. 
select문으로 조회된 첫 번째 로우에 대해서 rownum이 1로 지정될텐데
그럼 rownum이 1보다 크다는 조건이 거짓이 되므로 제외됩니다. 
그러면 그 다음의 두번째 로우가 첫번째 로우가 되고 rownum이 1이 지정됩니다.
역시 조건이 거짓이 되므로 제외됩니다.
그런 식으로 모든 로우에 대해 조건을 만족하지 못하게 되니 조회되는게 없게 됩니다.

이렇다는군...

그럼.

select * from (
    select rownum rn, a.
    from rowtest a
    where rownum <= 10
) a where rn >= 6

이렇게 하라는데, 이건 안쪽의 쿼리에 정렬이 없을 때에나 사용가능하다.
조건 처리 후, 정렬 하기 때문에, 정렬 후에 rownum으로 갯수를 한정하고 싶으면 서브쿼리로 해야할 듯.

삼중으로 가야할 듯 해서 뒤져보니 역시나...
SELECT *
FROM
  (
    SELECT rownum rn, A.*
    FROM
      (
        SELECT num, status
        FROM bp_test1
        WHERE
          status != 'D'
        ORDER BY status ASC, num ASC
      ) A
    WHERE
      rownum <= 20 --Maximun
  )
WHERE
  rn >= 6 --Start#


'프로그래밍 > DB' 카테고리의 다른 글

[ORACLE] 특수문자 입력  (0) 2009.10.21
[Oracle] Toad 단축키  (0) 2009.08.22
[Oracle] [펌] sqlplus 사용법  (0) 2009.03.24
[펌] MSSQL 함수모음  (0) 2009.01.14
[펌] MSSQL 날짜 함수  (0) 2009.01.14

[Oracle] [펌] sqlplus 사용법

프로그래밍/DB 2009. 3. 24. 14:25 Posted by galad
출처: http://sjunious.egloos.com/828939

1. DB를 사용하기위해 ORACLE로 LOGIN 방법
가. SQLPLUS [Enter]
User ID : xxxxxx
password : xxxxxxxx
나. SQLPLUS user_id [Enter]
password : xxxxxxxx
다. SQLPLUS user_id/password [Enter]
※ 다. 와 같은 방법으로 Login 하게 되면 사용자명과 암호가 노출된다
그러므로 가장좋은 방법은 가, 그리고 나. 이다

2. SQLPLUS 상에서는 Auto Commit이 안된다. 그러므로 중간 중간 " COMMIT "를
수행한다.

3. SQL 문장의 Terminate 는 ==> “ ; ”

4. 한 화면씩 보여주는 기능
==> set pause on; (설정)
set pause off; (해제)
※ 설정을 하고나서 SQL 명령을 수행하면 커서가 그 다음 LINE에서 대기하고
있으므로 [Enter] Key를 친다. 그 다음부터는 Enter키로 한화면씩 보면 됨

5. SQL 명령어를 모를 경우 ?
==> help [명령어]

6. Unix 명령어를 사용하기 위해서는 ?
==> “ ! ” 를 붙여 사용한다.

7. 바로전에 실행한 SQL문을 FILE로 저장하려면 ?
==> “ save ”

8. 파일의 내용을 메모리로 불러오려면 ?
==> “ get ” 를 붙여 사용한다.

9. 메모리로 불러온 SQL문이나 메모리에 있는 명령을 실행 하려면 ?
==> “ / ” 를 붙여 사용한다.

10. 바로 전에 수행한 명령어를 편집하려면 ?
==> “ ed ” 를 붙여 사용한다.

11. 바로 전에 수행한 명령어 보려면 ?
==> “ l ” 를 붙여 사용한다.

12. SQL문이 있는 FIle을 바로 실행하려면 ?
==> “ @ ” 또는 " Start " 를 붙여 사용한다.

13. set heading off / on
==> Columns 명을 나타내지 않는다.

14. set arraysize line_number(숫자);
==> 한번에 DATA를 가져오는 단위

15. set timing on / off
==> sql문을 수행하는데 소요되는 시간을 나타내어 준다.

'프로그래밍 > DB' 카테고리의 다른 글

[Oracle] Toad 단축키  (0) 2009.08.22
[oracle10g] 페이징 시 rownum 사용하기  (0) 2009.04.06
[펌] MSSQL 함수모음  (0) 2009.01.14
[펌] MSSQL 날짜 함수  (0) 2009.01.14
[펌] date 타입 변환 함수  (0) 2009.01.14

ORLCLE->MSSQL

프로그래밍/DB 2009. 1. 14. 14:15 Posted by galad

오라클함수 -> MSSQL함수

LENGTH -> LEN
ADD_MONTH -> DATEADD
DECODE -> CASE WHEN THEN
TO_CHAR -> CONVERT
SUBSTR  -> SUBSTRING
NVL -> isNULL
SYSDATE -> GETDATE()
TRUNC -> FLOOR
LIMIT -> TOP
TO_DATE([DATE],'YY-MM-DD') -> CONVERT(VARCHAR(8),[DATE],102)  : CONVERT의 마지막 인수를 잘 설정하면됨.

[Oracle/펌] PL/SQL 01

프로그래밍/DB 2007. 11. 27. 14:06 Posted by galad
출처 블로그 > 행운의 별자리님의 블로그
원본 http://blog.naver.com/kwakjt/26651797

◈ 개요.

PL/SQL (Oracle’s Procedural Language extension to SQL) 은 SQL의 확장된 개념으로 ORACLE에서 지원하는 프로그래밍 언어의 특성을 수용한 SQL의 확장이며, PL/SQL Block내에서 SQL의 DML(데이터 조작어)문과 Query(검색어)문, 절차형 언어(if, loop)등을 사용하여 절차적 프로그래밍을 가능하게 한 강력한 트랜잭션 언어이다.
 
PL/SQL 문은 블록구조로 이루어지며 PL/SQL 자신이  컴파일 엔진을 포함하고 있다.

 

◈ 장점.

PL/SQL 문은 BLOCK 구조로 다수의 SQL 문을 한번에 ORACLE DB 로 보내서 처리하므로 수행 속도를 향상 시킬수 있다.
PL/SQL 의 모든 요소는 하나 또는 두개 이상의 블록으로 구성하여 모듈화가 가능하다.
보다 강력한 프로그램을 작성하기 위해서 큰 블록안에 소블럭을 위치시킬 수 있다.
Variable, Constant, Cursor, Exception을 정의하고, SQL문장과 Procedural 문장에서 사용한다.
단순, 복잡한 데이터 형태의 변수를 선언한다.
테이블의 데이터 구조와 DataBase의 컬럼에 준하여 동적으로 변수를 선언 할 수 있다.
Exception 처리 루틴을 이용하여 Oracle Server Error를 처리 할 수 있다.
사용자 정의 에러를 선언하고 Exception 처리 루틴으로 처리 할 수 있다.

 

◈ 구조.

PL/SQL은 논리적인 블록으로 이루어진 구조화된 블록언어로써 세개의 섹션으로 구성된다.

 -. 선언부.

 -. 실행부.

 -. 예외처리부.

 

1. 선언부

 Declare 문으로 시작하며 블록에서 사용될 변수, 상수, 커서, 예외를 선언하는 섹션으로 필요하지 않으면 생략할 수 있는 선택적 섹션이다.

     - 변수선언

     - 상수선언

     - 커서선언

     - Exception선언

 

2. 실행부

 Begin 문으로 시작하여 End; 문으로 종료하며 수행될 작업의 몸체이다.

 SQL문, 제어문, 반복문, 커서속성 등을 이용하여 블록에서 실행할 몸체를 구성할 수 있으며 생략할 수 없는 필수적 섹션이다.

     - Select / Update, Insert, Delete

     - IF문

     - Loop문

     - 커서속성

 

3. 예외처리부

 예외처리 섹션은 End; 문 바로 앞에 위치하며 미리정의된 예외를 추적하고 명시된 조건이 발생할 경우에 취할 작업을 정의하고 선택적 섹션이다.

     - 미리정의된 예외

     - 사용자정의 예외

     - Exception 함수(sqlcode, sqlerrm)

 

Declare, Begin, Exception 문은 세미콜론(;)이 붙어서는 않되지만, End 문과 모든 PL/SQL 문장은 줄의 마지막에 세미콜론을 반드시 붙여야 한다.

 

PL/SQL종류 

1. 익명(이름없는) Procedure

   이름없이 사용되는 PL/SQL 블록.
   DB에 저장되지 않고 사용자가 필요할 때마다 반복적으로 작성, 실행.
2. 2. Stored Procedure
   생성이후 DB에 정보가 저장됨.
   실행하려는 로직을 처리하고 PL/SQL블록의 흐름제어.
   인자를 받아서 호출되고 실행.
3. 3. Stored Function
   프로시저와 동일한 개념, 기능이나 처리결과를 사용자에게 리턴.
4. 4. Package
   특정업무에 사용되는 프로시저 또는 함수를 묶어 생성하여 관리.
5. 5. Trigger
   테이블 생성시 지정.
   지정된 이벤트 발생시 자동적으로 호출되어 실행되는 특수한 형태의 프로시저.
   DB의 감시, 보안, 연속적 오퍼레이션의 자동처리 구현
 

'프로그래밍 > DB' 카테고리의 다른 글

[펌] PL/SQL 03  (0) 2007.11.27
[펌] PL/SQL 02  (0) 2007.11.27
[JDBC] 06 PL/SQL  (0) 2007.11.27
[JDBC] 05 ResultSet  (0) 2007.11.27
[JDBC] 04 JDBC - Connection Pool...  (0) 2007.11.27