PL SQL 주소 나누는 펑션 질문합니다. 0 2 1,657

by 박광현 [PL/SQL] pl sql 주소 펑션 [2013.04.21 18:48:07]


database.JPG (70,775Bytes)

안녕하세요. PL SQL을 막 배우고 있는 초보자 입니다.

PL SQL 에서 substr, instr, translate, trim 등등 여러 함수를 사용하여

아래 첨부된 그림 파일과 같이 데이터 베이스 칼럼을 나눌려고 하는데

잘모르는 부분이 많아서 질문등록합니다. 


칼럼 STREET1 을 또다른 테이블의 STREETNUMBER 와 STREETNAME 칼럼으로 나누어서 

넣는 FUNCTION을 만들어야 하는게 주 목적입니다. 

저는 GET_STREETNUMBER 와 GET_STREETNAME 이라는 FUNCTION을 만들어서 그안에 IF문으로
조건을 충족시키려하니 잘안되네요. 많은 답변 부탁드립니다.

아래는 제가 시도한 GET_STREETNUMBER  FUNCTION 입니다
create or replace 
FUNCTION                     GET_STREETNUMBER 
 (p_street IN VARCHAR2)
 RETURN VARCHAR2 AS
 v_number VARCHAR2(100); 
BEGIN
IF instr(p_street, 'PO BOX', 1) >= 1 THEN
 v_number := null;
ELSIF instr(p_street, 'Cnr', 1) >= 1 THEN
 v_number := null;
ELSIF instr(p_street, 'Suite', 1) >= 1 THEN
 v_number := null;
ELSIF Length(trim(translate(p_street, '[A-Z] [a-z]', ' '))) = 0 THEN
 v_number := null;
ELSE
 v_number := substr(p_street, 1, (length(p_street)-(instr(p_street,'[0123456789]', -1))+1));

END IF;
RETURN v_number;
END GET_STREETNUMBER;
by 디케이 [2013.04.22 09:29:13]
 
CREATE OR REPLACE FUNCTION GET_STREETNUMBER(P_STREET IN VARCHAR2) RETURN VARCHAR2 AS
 V_NUMBER VARCHAR2(100);
BEGIN
 IF INSTR(P_STREET, 'PO BOX', 1) >= 1 THEN
 V_NUMBER := NULL;
 ELSIF INSTR(P_STREET, 'Cnr', 1) >= 1 THEN
 V_NUMBER := NULL;
 ELSIF INSTR(P_STREET, 'Suite', 1) >= 1 THEN
 V_NUMBER := NULL;
 ELSIF REGEXP_INSTR(P_STREET, '[[:digit:]]') == 0 THEN
 V_NUMBER := NULL;
 ELSE
    V_NUMBER := SUBSTR(P_STREET, 1, INSTR(P_STREET, ' ', REGEXP_INSTR(P_STREET, '[^[:digit:]]+$'))-1);
 END IF;

 RETURN V_NUMBER;
END GET_STREETNUMBER;

by 박광현 [2013.04.22 15:24:13]
정말감사합니다^^ 

죄송하지만 뒤에 STREETNAME 구하는 펑션에서는 조건문은 같이 들어가는것까지는 했는데

ELSE 뒤에 V_NUMBER 값에 무슨 값을 넣어야하는지 모르겠습니다.ㅠ

알려주시면 감사하겠습니다^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입