の方法は、連結演算子||
を使用することですので、あなたの関数がstreet
またはcity
で始まる何かを返すことになる、次のようになる:
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
しかしがある場合の値がこのクエリと一致すると、失敗します。都市ごとに複数の人がいる可能性があるので、あなたがしようとしていることは決してうまくいかない可能性が高くなります。また、例外ハンドラには、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にあなたの決定を下すことができます。
出典
2012-02-04 01:00:49
Ben
ご返信ありがとうございます。 –