테이블 t1을 상상해 2 COLS 있습니다"스마트"여기서 필터링 값에 대한 절 (오라클 10g)
나는 2 PARAMS에 의해 하나의 행 찾으려col1 col2
--------------
test 900 1
test 901 2
test 902 3
user 901 4
test 909 5
(이름, 코드)의 (테스트 이름, 사용자 등) 및 코드 - (901, 902, null, .. 등). 동일한 행 (코드, 이름)이 둘 이상일 수는 없습니다. Col1에 "test 901"이있는 행이 2 개가 없습니다.
코드 :
declare
name varchar2(30);
code varchar(10);
col_val varchar2(30);
col2_val numeric;
begin
name:= 'test';
code := '900';
select col1, col2 into col_val, col2_val
from t1
where
(REGEXP_LIKE(col1, name||'\s+'||code) -- (3)
or (
not REGEXP_LIKE(col1, name||'\s+'||code) -- (1)
and REGEXP_LIKE(col1, name) -- (2)
)
)
order by col1;
DBMS_OUTPUT.PUT_LINE('val:'||col_val||' id:'||col2_val);
end;
1) 테스트 값 이름 : = '테스트'코드 = '900'결과가 있어야한다 "발 : 시험 900 ID : 1"- 그것은 OK입니다.
2)하지만 이름 : = '테스트'코드 :하지만 내가 가진 "발 : 시험 900 ID : 1"= '909' 결과는 ": 시험 909 ID 5 발"이어야합니다 (Name = 'Test'가있는 첫 번째 행) - 원하는 것은 아닙니다. '999' 결과는 "val : test 900 id : 1"이어야합니다 (999 코드가 없으므로 해당 행이 필요합니다. 'Name'= 'test'내부에 있음).
주된 질문은 2) 예를 들어 WHERE oracle Ignores (1) 절입니까? 아마 내가 뭔가 잘못하고있는 것 같습니다. 실수를해도 좋을 것 같습니다.
where 절에서 "rownum = 1"행을 제거했습니다. Tnks Thilo. – zmische