* 특정 컬럼의 문자열을 Delimeter로 파싱하여, 특정 번째 토큰을 변경하는 Function
-- 문자열 파싱 후 특정 토큰 값 변경하는 Function (DB2)
CREATE FUNCTION fnGetNodeIPObjectBody( IPObjectBody_ VARCHAR(256), NewIPName_ VARCHAR (32), NewPortName_ VARCHAR (32) )
RETURNS VARCHAR(256)
BEGIN ATOMIC
DECLARE SubStr_ VARGRAPHIC(256) DEFAULT '';
DECLARE Index_ INT DEFAULT 0;
DECLARE FindIndex_ INT DEFAULT 4; -- 5번째가 포트이므로.
DECLARE Delimiter_ VARGRAPHIC(1) DEFAULT '$';
DECLARE PreStr_ VARGRAPHIC(256) DEFAULT '';
DECLARE PostStr_ VARGRAPHIC(256) DEFAULT '';
DECLARE IpObjectName_ VARGRAPHIC(256) DEFAULT '';
IF (IPObjectBody_ IS NULL) THEN
RETURN NULL;
END IF;
-- IP Object format
-- [Network name] [Type(0/1/2)] [IP Address(ip_addr) or range(b_addr-e_addr)] [Netmask(Bit count)] [Interface Name(absX)|all] [Security Label(0-2)] [Description]
SET SubStr_ = IpObjectBody_;
-- name
SET SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
SET IpObjectName_ = substr(IpObjectBody_, 1, length(IpObjectBody_)-length(SubStr_)-1);
-- type
set SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
-- ip address
set SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
-- mask
set SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
SET PreStr_ = substr(IpObjectBody_, length(IpObjectName_) + 2, length(IpObjectBody_)-length(SubStr_)-length(IpObjectName_) - 2);
SET PostStr_ = substr(SubStr_, locate(Delimiter_, SubStr_) + 1 );
RETURN NewIPName_ || '$' || PreStr_ || '$' || NewPortName_ || '$'|| PostStr_;--
END;
* 위 함수 사용해서 일관 변환하기
UPDATE TBNODEIPPORT ni
SET ni.BODYTEXT =
(
SELECT fnGetNodeIPObjectBody(o.BODYTEXT, n.NAME, p.NAME)
FROM TBIPOBJECT o, TBNODEIPPORT n, TBNETPORTOBJECT p
WHERE n.NODEIPPORTID = ni.NODEIPPORTID
AND o.IPOBJECTID = n.IPOBJECTID
AND n.NETPORTOBJECTID = p.NETPORTOBJECTID
)
WHERE ni.NODEIPPORTID IN
(
SELECT NODEIPPORTID
FROM TBIPOBJECT o, TBNODEIPPORT n, TBNETPORTOBJECT p
WHERE o.IPOBJECTID = ObjectID_
AND o.IPOBJECTID = n.IPOBJECTID
AND n.NETPORTOBJECTID = p.NETPORTOBJECTID
);
- 2009/03/11 이전 작성글 이관
-- 문자열 파싱 후 특정 토큰 값 변경하는 Function (DB2)
CREATE FUNCTION fnGetNodeIPObjectBody( IPObjectBody_ VARCHAR(256), NewIPName_ VARCHAR (32), NewPortName_ VARCHAR (32) )
RETURNS VARCHAR(256)
BEGIN ATOMIC
DECLARE SubStr_ VARGRAPHIC(256) DEFAULT '';
DECLARE Index_ INT DEFAULT 0;
DECLARE FindIndex_ INT DEFAULT 4; -- 5번째가 포트이므로.
DECLARE Delimiter_ VARGRAPHIC(1) DEFAULT '$';
DECLARE PreStr_ VARGRAPHIC(256) DEFAULT '';
DECLARE PostStr_ VARGRAPHIC(256) DEFAULT '';
DECLARE IpObjectName_ VARGRAPHIC(256) DEFAULT '';
IF (IPObjectBody_ IS NULL) THEN
RETURN NULL;
END IF;
-- IP Object format
-- [Network name] [Type(0/1/2)] [IP Address(ip_addr) or range(b_addr-e_addr)] [Netmask(Bit count)] [Interface Name(absX)|all] [Security Label(0-2)] [Description]
SET SubStr_ = IpObjectBody_;
-- name
SET SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
SET IpObjectName_ = substr(IpObjectBody_, 1, length(IpObjectBody_)-length(SubStr_)-1);
-- type
set SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
-- ip address
set SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
-- mask
set SubStr_ = substr( SubStr_, locate(Delimiter_, SubStr_) + 1 );
SET PreStr_ = substr(IpObjectBody_, length(IpObjectName_) + 2, length(IpObjectBody_)-length(SubStr_)-length(IpObjectName_) - 2);
SET PostStr_ = substr(SubStr_, locate(Delimiter_, SubStr_) + 1 );
RETURN NewIPName_ || '$' || PreStr_ || '$' || NewPortName_ || '$'|| PostStr_;--
END;
* 위 함수 사용해서 일관 변환하기
UPDATE TBNODEIPPORT ni
SET ni.BODYTEXT =
(
SELECT fnGetNodeIPObjectBody(o.BODYTEXT, n.NAME, p.NAME)
FROM TBIPOBJECT o, TBNODEIPPORT n, TBNETPORTOBJECT p
WHERE n.NODEIPPORTID = ni.NODEIPPORTID
AND o.IPOBJECTID = n.IPOBJECTID
AND n.NETPORTOBJECTID = p.NETPORTOBJECTID
)
WHERE ni.NODEIPPORTID IN
(
SELECT NODEIPPORTID
FROM TBIPOBJECT o, TBNODEIPPORT n, TBNETPORTOBJECT p
WHERE o.IPOBJECTID = ObjectID_
AND o.IPOBJECTID = n.IPOBJECTID
AND n.NETPORTOBJECTID = p.NETPORTOBJECTID
);
- 2009/03/11 이전 작성글 이관
'Programming > Database' 카테고리의 다른 글
[DB2] 스트링을 특정 구분자로 분리하여 테이블로 리턴하는 함수 (0) | 2010.08.11 |
---|---|
[DB2] 특정 쿼리 결과에 순차적으로 번호 붙이기 (0) | 2010.08.05 |
[MSSQL] 다른디비에 접근하기위한 쿼리 (0) | 2010.06.23 |
[DB2] 이미 생성된 테이블 정보 수정하기 (0) | 2010.06.23 |
[DB2] CHAR 변환 후 공란제거하기 (0) | 2010.06.23 |
댓글