Imaginez la table t1 ont 2 cols:"Smart" clause where pour les valeurs de filtrage (Oracle 10g)
col1 col2
--------------
test 900 1
test 901 2
test 902 3
user 901 4
test 909 5
Je veux trouver juste une ligne de 2 params (nom, code) où nom de son (test, utilisateur ..etc) et le code - (901, 902, null, .. etc). Il ne peut pas y avoir plus d'une rangée de la même chose (code, nom) - Je veux dire qu'il n'y a pas 2 lignes qui ont "test 901" dans Col1.
code:
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) pour le nom des valeurs de test: 'test' code =: = '900' le résultat devrait être "val: Test 900 id: 1" - Il est OK.
2) mais pour nom: = code 'test': = '909' le résultat devrait être "val: test de 909 id: 5", mais je suis arrivé "val: Test 900 id: 1" (la première rangée avec Name = 'Test') - Ce n'est pas ce que je veux. 3) et dans le cas: = 'test' code: = '999' le résultat devrait être "val: test 900 id: 1" (il n'y a pas de code 999, donc j'ai besoin de n'importe quelle ligne avoir Name = 'test' à l'intérieur).
La question principale est pourquoi oracle Ignores (1) clause pour 2) exemple? Peut-être que je fais quelque chose de mal - donc ce serait génial si vous pouviez montrer mon erreur!
Suppression de la ligne "rownum = 1" de la clause where. Tnks Thilo. – zmische