Gå til innhold

Bindvariabler returnere alle resultater?


Anbefalte innlegg

Er det mulig å få bindvariabler til å returnere alle resultater? Eksempel

 

blablalba

where navn = :navnet

 

og da sette inn en verdi som returnerer alle resultatene uten å bruke like? Vet det går ann å bruke like å legge til %.

 

Og et tilleggspørsmål. Vil en spørring med like '%' gjør spørringen noe særlig tregere enn om en ikke hadde hatt det i where clausen i det hele tatt?

Endret av lapla
Lenke til kommentar
Videoannonse
Annonse
En spørring med WHERE kolonne like '%' og en uten WHERE vil ikke det samme. NULL verdier vil ikke valideres til true ved bruk av LIKE '%'.

 

Okei, det er ikke noe prob for min del. Det betyr likevel at det har liten betydning på tiden det tar å loade querien? Er litt betydningsfullt at querien ikke tar for mye tid skjønner du.

Lenke til kommentar
Du kan jo teste selv?

 

Tar ca 2 sek å teste...

 

Har testa og ser rimelig likt ut, men nå er ikke databasen jeg jobber mot særlig stor akkurat nå så får ikke testa ordentlig. Hadde gjerne om noen visste tatt i mot en forklaring på hvordan databasen vil behandle en like % om noen hadde hatt ork.

 

Uansett så var det bare et bispørsmål.... Noen som vet om det går ann å bruke bind variabler å sette inn verdi som returnerer alt ?

 

altså: where navn = :bindvariabel

 

Må returnere eksakt resultat, og best mulig ytelse, så like er ikke et godt valg.

Lenke til kommentar

Like er kun noe poeng å bruke når du ønsker muligheten til ikke-eksakt resultat. = fungerer fint. Hvis du skal sammenligne tekst så er syntaksen du skrev riktig for hql, mens den for sql er navn = ?

 

I java:

 

PreparedStatement ps = con.prepareStatement(".... WHERE navn = ?);

ps.setString(1,"Ola nordmann");

ResultSet rs = ps.executeQuery();

 

Hvis du ikke alltid skal ha med navn i WHERE clausen så bygger du opp strengen som skal inn i preparedstatements med if og tilsvarende med setString biten. (2 if-setninger pr variabel mao)

Lenke til kommentar
Like er kun noe poeng å bruke når du ønsker muligheten til ikke-eksakt resultat. = fungerer fint. Hvis du skal sammenligne tekst så er syntaksen du skrev riktig for hql, mens den for sql er navn = ?

 

I java:

 

PreparedStatement ps = con.prepareStatement(".... WHERE navn = ?);

ps.setString(1,"Ola nordmann");

ResultSet rs = ps.executeQuery();

 

Hvis du ikke alltid skal ha med navn i WHERE clausen så bygger du opp strengen som skal inn i preparedstatements med if og tilsvarende med setString biten. (2 if-setninger pr variabel mao)

 

Takk for svar.

Med andre ord du må altså endre i selve spørringen. Det går altså ikke å sette inn en verdi i bindvariablen som gjør at du returnerer alle resultatene. Er forøvrig mot oracle DB det er snakk om.

Lenke til kommentar
Er det ikkje mogleg å setja ps.setString(1,"%Ola"); for å finna alle som begynner på Ola?

Hvis du bruker LIKE så vil du finne alle som slutter med Ola...

 

Det er mest sannsynlig et søk og trådstarter vil ikke gjøre et søk på LIKE '%' hvis det ikke er skrevet inn noe navn.

Lenke til kommentar
Er det ikkje mogleg å setja ps.setString(1,"%Ola"); for å finna alle som begynner på Ola?

Hvis du bruker LIKE så vil du finne alle som slutter med Ola...

 

Det er mest sannsynlig et søk og trådstarter vil ikke gjøre et søk på LIKE '%' hvis det ikke er skrevet inn noe navn.

 

Ønsker som nevnt ikke å bruke like. Ønsker eksakte verdier. Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. Det er hovedsaken med at jeg ønsker å bruke = istedet for like. Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. Tror faktisk ikke det lar seg gjøre. :(

Lenke til kommentar
Ønsker som nevnt ikke å bruke like. Ønsker eksakte verdier. Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. Det er hovedsaken med at jeg ønsker å bruke = istedet for like. Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. Tror faktisk ikke det lar seg gjøre. :(

Hva mener du egentlig? Vil du ha alt,

Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola.

eller vil du ikke ha alt?

Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier.

 

???

 

M.

Lenke til kommentar
Ønsker som nevnt ikke å bruke like. Ønsker eksakte verdier. Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. Det er hovedsaken med at jeg ønsker å bruke = istedet for like. Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. Tror faktisk ikke det lar seg gjøre. :(

Hva mener du egentlig? Vil du ha alt,

Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola.

eller vil du ikke ha alt?

Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier.

 

???

 

M.

Du har altså en komboboks fylt med brukernavn. Verdien brukeren velger der settes inn som verdi i bindvariabelen :brukernavn. Hvis du da velger brukernavnet Ola så skal du ikke få resultater fra brukeren olaf32. Derimot er et av alternativene i komboboksen at du kan velge info fra alle brukere.

 

Spørring 1:

 

select * from brukerinfo

where brukernavn like :brukernavn

 

Spørring 2:

select * from brukerinfo

where brukernavn = :brukernavn

 

:brukernavn = verdien til komboboksen.

 

Hvis spørring type 1 er tatt i bruk, og komboboks verdien er Ola, så vil du returnere brukerdata for alle brukere som begynner med ola, altså du får informasjonen fra olaf33 også... Hvis du skal returnere data for alle brukere så setter du inn %.

 

Hvis spørring 2 er tatt i bruk vil du få info fra kun brukeren ola. Men.. Hva skal en sette inn for å returnere resultat for alle brukere her ?

Endret av lapla
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...