database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
ㆍInformix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Informix Q&A 2226 게시물 읽기
No. 2226
이 쿼리를 인포믹스로 바꿔야하는데요..
작성자
김병호
작성일
2005-10-14 14:15
조회수
10,446

프로젝트 하는 곳이 사이베이스를 쓰다가..

인포믹스로 바꾸게 되서요..

이 쿼리를 바꿔야 하는데...

디비쪽이 원래 좀 약해서..

어찌해야 해야 할지 모르겠네요...

 

 

declare @cort_code varchar (5)
declare @brnc_code varchar (5)
declare @fnc_fss_cod varchar (5)
declare @brnc_name varchar (50)
declare @open_date varchar (8)
declare @post1 varchar (3)
declare @post2 varchar (3)
declare @address1 varchar (100)
declare @address2 varchar (100)
declare @fnc_brc_tel1 varchar (4)
declare @fnc_brc_tel2 varchar (4)
declare @fnc_brc_tel3 varchar (4)
declare @brc_fax1 varchar (4)
declare @brc_fax2 varchar (4)
declare @brc_fax3 varchar (4)
declare @brnc_reg_num varchar (20)
declare @brnc_add_inf varchar (20)

set @cort_code = ?
set @brnc_code = ?
set @fnc_fss_cod = ?
set @brnc_name = ?
set @open_date = ?
set @post1 = ?
set @post2 = ?
set @address1 = ?
set @address2 = ?
set @fnc_brc_tel1 = ?
set @fnc_brc_tel2 = ?
set @fnc_brc_tel3 = ?
set @brc_fax1 = ?
set @brc_fax2 = ?
set @brc_fax3 = ?
set @brnc_reg_num = ?
set @brnc_add_inf = ?

IF(NOT EXISTS(
SELECT *
FROM TBMBRNC
WHERE CORT_CODE = @cort_code
AND BRNC_CODE = @brnc_code
AND FNC_FSS_COD = @fnc_fss_cod
AND BRNC_NAME = @brnc_name
AND OPEN_DATE = @open_date
AND POST1 = @post1
AND POST2 = @post2
AND ADDRESS1 = @address1
AND ADDRESS2 = @address2
AND FNC_BRC_TEL1 = @fnc_brc_tel1
AND FNC_BRC_TEL2 = @fnc_brc_tel2
AND FNC_BRC_TEL3 = @fnc_brc_tel3
AND BRC_FAX1 = @brc_fax1
AND BRC_FAX2 = @brc_fax2
AND BRC_FAX3 = @brc_fax3
AND BRNC_REG_NUM = @brnc_reg_num
AND BRNC_ADD_INF = @brnc_add_inf
))
BEGIN
INSERT TBMHSTR
(CORT_CODE
,BRNC_CODE
,FNC_FSS_COD
,BRNC_NAME
,OPEN_DATE
,POST1
,POST2
,ADDRESS1
,ADDRESS2
,FNC_BRC_TEL1
,FNC_BRC_TEL2
,FNC_BRC_TEL3
,BRC_FAX1
,BRC_FAX2
,BRC_FAX3
,BRNC_REG_NUM
,BRNC_ADD_INF )
VALUES
(@cort_code
,@brnc_code
,@fnc_fss_cod
,@brnc_name
,@open_date
,@post1
,@post2
,@address1
,@address2
,@fnc_brc_tel1
,@fnc_brc_tel2
,@fnc_brc_tel3
,@brc_faX1
,@brc_faX2
,@brc_faX3
,@brnc_reg_num
,@brnc_add_inf
)
IF(EXISTS(
SELECT *
FROM TBMBRNC
WHERE CORT_CODE = @cort_code
AND BRNC_CODE = @brnc_code
))
BEGIN
UPDATE TBMBRNC
SET FNC_FSS_COD = @fnc_fss_cod
,BRNC_NAME = @brnc_name
,OPEN_DATE = @open_date
,POST1 = @post1
,POST2 = @post2
,ADDRESS1 = @address1
,ADDRESS2 = @address2
,FNC_BRC_TEL1 = @fnc_brc_tel1
,FNC_BRC_TEL2 = @fnc_brc_tel2
,FNC_BRC_TEL3 = @fnc_brc_tel3
,BRC_FAX1 = @brc_fax1
,BRC_FAX2 = @brc_fax2
,BRC_FAX3 = @brc_fax3
,BRNC_REG_NUM = @brnc_reg_num
,BRNC_ADD_INF = @brnc_add_inf
WHERE CORT_CODE = @cort_code
AND BRNC_CODE = @brnc_code
END
ELSE
BEGIN
INSERT TBMBRNC
(CORT_CODE
,BRNC_CODE
,FNC_FSS_COD
,BRNC_NAME
,OPEN_DATE
,POST1
,POST2
,ADDRESS1
,ADDRESS2
,FNC_BRC_TEL1
,FNC_BRC_TEL2
,FNC_BRC_TEL3
,BRC_FAX1
,BRC_FAX2
,BRC_FAX3
,BRNC_REG_NUM
,BRNC_ADD_INF )
VALUES
(@cort_code
,@brnc_code
,@fnc_fss_cod
,@brnc_name
,@open_date
,@post1
,@post2
,@address1
,@address2
,@fnc_brc_tel1
,@fnc_brc_tel2
,@fnc_brc_tel3
,@brc_faX1
,@brc_faX2
,@brc_faX3
,@brnc_reg_num
,@brnc_add_inf
)
END
END

이 글에 대한 댓글이 총 3건 있습니다.

제 생각엔...

올리신 프로시저처럼 간단한 프로시저는

예제 한번만 보면 다 해결될거 같네요..

 

--변수선언
DEFINE v_input_icnt integer;
--값 할당
LET v_input_icnt    = 0;

-- IF(EXISTS( ...)) 또는 IF(NOT EXISTS( ...))
SELECT count(*)...로 대체

--SQL문의 @변수
오라클처럼 @를 사용안함

 

차영인(Guideposts)님이 2005-10-17 12:18에 작성한 댓글입니다.

차영인님 댓글 감사합니다^^

근데요..

제가 지식이 짧아서 그런건지..

말씀데로 declare을 difine으로 고치고

set도 let로 고쳤는데도...

자꾸 문법오류가 나오네요...

좀더 자세한 설명이나 비슷한 예제가 있다면..

제 이멜이나 여기에 좀 남겨주시면 안될까요?

김병호님이 2005-10-17 16:59에 작성한 댓글입니다. Edit

informix는 첨이라..아직 작성한 프로시저가 없답니다..

 

다른 분이 짜놓은거...수정해서 올릴께요..

이게 informix의 성능을 최대한 살린건지 아닌지는 모르겠구요..

(솔직히...프로그래머적인 사고방식으로 짜놓은 너무 단순한 프로시저같음)

 

본 프로시저의 내용을 가리기 위해..

변수명, 컬럼명, 테이블명, SQL문을 별 생각없이 수정을 해놔서..

컴파일 에러가 여지없이 발생할 예제이며..

선언된 변수랑..실제 사용된 변수랑 맞지 않을겁니다..

 

내용은 보지마시고...

문법을....변수선언, 커서사용, SQL문 관련 문법만 참고하세요...

 

다른 DB 사용하신 분이면..대충은 파악가능하실 겁니다...

 

코드 내용중에..

 

.....

UPDATE문 실행

....

IF DBINFO('sqlca.sqlerrd2') = 0 .....

.. INSERT문 실행..

END IF;

 

 

부분이 있는데요...

아마..한번보시면..IF (EXISTS())...구문을 대체할 때 사용하실 수

있다는걸 파악할 수 있을겁니다.

 

모르는 내용이 있으시면...

자료실에 informix 관련 매뉴얼이 올라와있으니 참고하세요..

 

 

 

CREATE PROCEDURE sampleSPL(v_start_dt CHAR(8), v_end_dt CHAR(8))
    DEFINE  v_input_cnt   INT;
 DEFINE  v_bJM           LIKE test_tbl.JM          ;
 DEFINE  v_bUSER_NAME        LIKE test_tbl.USER_NAME       ;
 DEFINE  v_bUPJONG_CD        LIKE test_tbl.UPJONG_CD       ;

 DEFINE v_BRTH_DATE     CHAR(8);
 
 LET v_input_cnt = 0;

 FOREACH
  SELECT
     b.JM
   , b.USER_NAME
   , b.UPJONG_CD
   , b.SEX_CD
     INTO
     v_bJM
   , v_bUSER_NAME
   , v_bUPJONG_CD
   , v_bSEX_CD
  FROM tblA a, tblB b, tblC c
  WHERE a.jm = b.jmr
    AND b.jm = c.jm
    AND b.chgDat BETWEEN v_start_dt AND v_end_dt

 BEGIN
  DEFINE v_err1  INT;
  DEFINE v_err2  INT;
  DEFINE v_errmsg CHAR(70);

  ON EXCEPTION set  v_err1,v_err2,v_errmsg
   INSERT INTO log_tbl
                 VALUES(
    'sampleSPL',
    user,
    v_err1||','||v_err2||','||v_errmsg,
    '',
    to_char(today,'%Y%m%d') ,
          to_char(today,'%Y%m%d')
    );
  END EXCEPTION WITH RESUME;

  UPDATE tdm_cust_prof
   SET (
      CUST_NAME
    , CMPY
    , SEX_TYPE
    )
   = (
      v_bUSER_NAME
    , v_bUPJONG_CD
    , v_bSEX_CD
   )
  WHERE cust_id = v_bJM;

  IF DBINFO('sqlca.sqlerrd2') = 0 THEN

   INSERT INTO cust01 (
      CUST_ID
    , CUST_NM
    , CMPY
    , HPTEL
    )
   VALUES (
      v_bJM
    , v_bUSER_NM
    , v_bUPJONG_CD
    , v_bSEX_CD
    , v_cHPTEL[1,3]
    );
   END IF;
   
   LET v_input_cnt = v_input_cnt +1;
   
  END ;
 END FOREACH;

END PROCEDURE ;

 

차영인(Guideposts)님이 2005-10-18 16:47에 작성한 댓글입니다.
이 댓글은 2005-10-18 16:55에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
2232조합형 한글은 사용이 안 되나요?
쥐도령
2005-11-18
7827
2231레이아웃만 그대로 복사하는 ... [1]
인포믹스 초보
2005-11-08
8208
2230LVARCHAR INSERT [1]
info
2005-11-03
8852
2226이 쿼리를 인포믹스로 바꿔야하는데요.. [3]
김병호
2005-10-14
10446
2225ESQL/C로 txt파일 읽어서 table에 넣기
차영인
2005-10-12
7838
2224불러온 데이터로 기간별 합계+평균내기. [1]
yioru
2005-10-12
8449
2220문법에런데 좀 봐주세여. [4]
yioru
2005-10-04
8849
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2022 DSN, All rights reserved.
작업시간: 0.086초, 이곳 서비스는
	PostgreSQL v14.2로 자료를 관리합니다