[oracle]porównanie części łańcucha

0

Witam,
mam widok dajmy na to:

CREATE OR REPLACE VIEW moj_widok AS
(
SELECT '12345678' as wynik
  FROM dual
)
WITH READ ONLY
; 

i selecta którego na nim wykonuję:

 
select * from moj_widok w where w.wynik='12345678'

Teraz problem:
mogę modyfikować widok, ale nie mogę modyfikować selecta(jest w aplikacji gdzieś zaszyty, wszelkie zapytania bazują na tym widoku).
Chcę, aby select sprawdzał tylko pierwsze 3 znaki i ostatnie 2 znaki.
Czy da się w widoku zwrócić taki łańcuch, żeby pasował do wszystkich tych przykładowych przypadków?:
'12344478'
'12322278'
'12333378'

Czyli wykonuje selecta z 1 przypadku:

 
select * from moj_widok w where w.wynik='12344478'

i chce żeby zwróciło mi: '12345678'
Da się bez modyfikowania samego selecta pobierającego dane z widoku?

0
Select * from wynik w where REGEXP_LIKE(w.wynik, '123[0-9]{3}78');

A takie coś co pasuje?

// edit: poprawione wyrażenie

0

@Koziołek on NIE MOŻE modyfikować selecta - jedynie widok.
Jedyne rozwiązanie jakie widzę to kolumnę widoku, na której jest warunek zrobić jako wyliczaną z danych tak aby ten select zwracał Ci to co potrzebujesz, ale to jest robienie sobie samemu kuku a nie rozwiązanie problemu

0

@Koziołek
1- oracle 8-nie działa regexp:/
ale to akurat załatwiłęm dwoma substr i like:P
tylko nie wiem co będzie szybsze:

wynik like substr('1234567890123456', 1, 3)||'%'||substr('1234567890123456', -2, 2)

czy

 substr(wynik, 1, 3)=substr('1234567890123456', 1, 3)
 AND  substr(wynik, -2, 2)=substr('1234567890123456', -2, 2)

2-chodzi mi o to raczej, żeby zmodyfikować widok.
W kilku miejscach w aplikacji jest takie porównanie na kolumnie tego widoku "select * from widok where :param=wynik"
A ja chcę dostać z widoku taki VARCHAR2, który po porównaniu w select ma pasować.

Pewnie się nie da, więc raczej muszę wyszukać wszystkie selecty w aplikacji:/

Myślałem, że opieranie zapytań na widokach to takie elastyczne podejście:P

btw:
Jak to się robi w praktyce? Chodzi mi o żenienie ORACLA i webowej aplikacji opartej o jdbc?
Dane się pobiera selectami, opiera na widokach, czy procedurach skąłdowanych?

0

@Misiekd, select z widoku.

@void-tec, rozsądni ludzie używają JPA i nie martwią się o to jak silnik to sobie zmapuje. Jedynie poryte rzeczy są przenoszone do procedur/funkcji/widoków i te są mapowane "ręcznie" w JPA.

0

podstawowe pytanie korzystając z okazji czy JPA wymaga ingerencji w strukturę danych na bazie?
u mnie jest o tyle problem, że cała webowa aplikacja działa na bazie, która stoi od lat, więc nie bardzo można ją modyfikować. Dodawać jeszcze coś tam można.

Dzięki, przeanalizuje Twoje sugestie

0

JPA nie wymaga zmian w bazie danych. Wystarczy odpowiednio skonfigurować dostawcę. Hibernate dostarcza nawet narzędzi, które na podstawie schemy wygeneruje klasy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1