2012-02-03 4 views
0

Oracle 기능에 전달 된 입력 값을 사용하여 문자열을 검색하려고합니다.Function - Oracle을 사용한 검색 문자열

CREATE OR REPLACE FUNCTION uf_search_address 
(
    street IN VARCHAR2, 
    city IN VARCHAR2 
) 
RETURN NUMBER 
IS RCVD_PERSON_ID NUMBER; 
BEGIN 
    SELECT PERSON_ID INTO RCVD_PERSON_ID 
    FROM T_PARTICIPANTS 
    WHERE COMPLETE_ADDRESS LIKE street[?] OR COMPLETE_ADDRESS LIKE city[?] 
    RETURN (RCVD_PERSON_ID); 
END; 

을하지만 쿼리는 (그것이 비록 컴파일) 아무것도 반환하지 : [I 원래 코드를 붙여 넣을 수 없습니다 이후 수정] 코드는 다음과 같습니다.

전달 된 매개 변수와 함께 LIKE 기능을 어떻게 사용할 수 있습니까?

create or replace function uf_search_address (P_street IN varchar2 
              , P_city IN varchar2 
               ) return number is 

    rcvd_person_id number; 

begin 

    select person_id 
    into rcvd_person_id 
    from t_participants 
    where complete_address like P_street || '%' 
     or complete_address like P_city || '%' 
      ; 

    return rcvd_person_id; 

exception when no_data_found then 
    return null; 

end; 
/
show error 

그러나 가 있다면 :

답변

1

매개 변수와 같이 사용하는 방법은 street 또는 city로 시작 아무것도 반환 || 그래서 함수는 다음과 같은 것이 연결 연산자를 사용하는 것입니다 이 쿼리와 일치하는 값이 보다 크면 실패합니다. 도시마다 한 명 이상의 사람이있을 확률이 높기 때문에 자신이하려는 일이 결코 효과가 없을 것입니다. 예외 처리기는 Oracle에 던져진 쿼리와 일치하는 쿼리가없는 것처럼 처리합니다.

당신은 코드에서 의사 결정의 일종을해야합니다 :

이 어느 rank를 사용하여 예를 들어, SQL 수행 할 수 있습니다.

select person_id 
    into rcvd_person_id 
    from (select person_id 
      from (select person_id 
         , rank() over (order by timestamp desc) as rnk 
        from t_participants 
        where complete_address like P_street || '%' 
         or complete_address like P_city || '%' 
         ) 
      where rnk = 1 
       ) 

이 또는 당신이 벌크 형태로 모든 것을 수집하고 일부 루프를 수행하여 PL \ SQL에서 결정을 내릴 수있다 : 타임 스탬프 아래의 예에서 매우 단순한 순위 시스템의 테이블에 입국 일이 될 것입니다.

+0

답장을 보내 주셔서 감사합니다. –