2010-07-08 3 views
0

단일 문자열 인 주소를 여러 문자열로 분할해야합니다. 다음은 주소를 해당 주소 행으로 분할하는 pl/sql 프로 시저에 대한 요구 사항입니다. 절차의 매개 변수 :PL/SQL 문자열 조작

가 인 (,,, VARCHAR2 을 AL4을 VARCHAR2를 AL3을 VARCHAR2를 AL2를 밖으로 나가 VARCHAR2에 주소 AL1 아웃 VARCHAR2) 생성하거나 절차 split_address 대체 .... 종료;

  1. 주소는 각각 varchar2 (100)의 4 개 라인 al1, al2, al3, al4로 분할되어야하는 varchar2 (250)입니다.
  2. 주소에 개행 문자 CHR (10)이 포함되어 있습니다. 그리고 이것들에 기초하여 분리가 이루어져야합니다.
  3. 주소 길이가 100보다 작거나 같으면 전체 주소를 세 번째 주소 줄 al3에 입력해야합니다.
  4. 주소 길이가 100보다 큰 경우에만 분할이 수행되어야합니다. 하나 개의 라인은 제 2 어드레스 라인에 첨가 중간에 또는 라인의 50 위치 및 나머지 근처, 행은 구분자에 의하여 둘로 분할되어야하는 100 개 이상의 문자 ','이다
  5. 경우
  6. 행 수가 4 개 이상인 경우 각 세그먼트를 하나의 주소 행으로 병합하여 최대 100자를 4 세그먼트까지
  7. 주소 행 3은 필수 출력입니다.

예를 들어 설명해 드리겠습니다. 주소가하자


이의 총 길이는 < (100)가 '문 YYYY
YYYYYYYYY
우편-NNNNNN
zzzzzzzzzzzzzzz
ZZZZZZZZZZZZZZZZZZZZ XXXXXXXXXX
XXXXXXXXXXX

#NN' 그 다음에 al3에 직접 들어가야합니다. 주소 길이가 100보다 길면 문제가 발생합니다. 이 주소는 8 개 라인을 가지고 있지만

같은 4 개 라인으로 만들 수 있어야합니다
  1. '문 #NN XXXXXXXXXX의 XXXXXXXXXX의 YYYY'-> 길이 100 최대
  2. 'YYYYYYYYYYY 우편-NNNNNNN, zzzzzzzzzzzz'-> 길이 100 최대
  3. 'zzzzzzzzzzz, ZZZZZZZZZZZZZZZZZZZZZ'-> 길이 100 최대
  4. 'zzzzzz입니다'-> 길이 100 최대

시스템은 오라클 10g이고, 나는 그것의 기능을 사용할 수 있습니다. 문제는 간단하지만 코드로 로직을 가져 오는 것은 약간 어렵습니다. 몇 가지 팁을 제공해주십시오. 미리 감사드립니다.

답변

0

나는 함수가 프로 시저보다 더 좋은 아이디어라고 생각한다.

다른 관찰 :

  • 가 줄 바꿈 및 개별 필드 가 100자를 초과 여부를
  • 결정하기 위해 오라클 길이 기능을 사용 쉼표를위한 검색에 오라클 INSTR 기능을 사용
  • 모든 확인입니다 가능한 입력은 이 지정된 요구 사항과 일치하는 출력을 생성 할 수 있습니까? 예를 들어 입력 줄이 자 이상인 경우에만 개행 문자가 하나만 포함되어 있으면 어떻게됩니까?
+0

함수를 사용하면 1보다 큰 값을 반환하기가 약간 어렵습니다. 어떻게하고 싶니? – Rene

+0

PL/SQL 함수는 프로 시저와 마찬가지로 인수를 가질 수 있습니다. –

+0

허용되지만 일반적으로 함수가 OUT 매개 변수를 갖는 것은 바람직하지 않습니다. – APC