Oracle XE en PHP Case insensitive zoeken

Pagina: 1
Acties:
  • 189 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
In een Oracle database staan 30.000 records met gegevens van dieren, deze dieren hebben namen met kleine en hoofdletters door elkaar.
oracle is hoofdletter gevoelig, maar ik wil graag hoofdletter ongevoelig kunnen zoeken.

Nu heb ik zelf al gezocht, maar ik snap er niets van en door de verschillende versies en daarbij gekoppelde functies van oracle zie ik ook niet echt de bomen in het bos meer.

de volgende uitleg en mogelijke oplossingen heb ik gevonden, maar snap niet hoe het werkt
http://www.arikaplan.com/oracle/ari41697b.html <-- gaat niet voor op voor XE
http://www.databasejournal.com/features/oracle/article.php/3494646 <-- geprobeerd, maar werkt niet.
http://forum.servoy.com/viewtopic.php?p=40541 <-- begrijp de werking / implementatie niet (oracle/php)
http://www.rampant-books.com/10g_77.htm <-- begrijp de werking / implementatie niet (oracle/php)

Nu aan een tweaker de vraag of die mij op weg kan helpen naar een oplossing.

NB: Zelf heb ik niet de mogelijkheid om aan de database te sleutelen qua mogelijke config instellingen, ik mag er alleen met de inhoud/gegevens in de weer.

Acties:
  • 0 Henk 'm!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
kun je beide niet in hoofdletters zetten?
code:
1
SELECT * FROM dieren WHERE UPPER(naam) = 'HOND'


Ik weet niet of UPPER in oracle bestaat maar vast wel iets soortgelijks.

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Even een wilde gooi (heb je linkjes nog niet bekeken):
SQL:
1
Select a,b,c from mytable where lower(somefield) = lower(somevalue)


upper, lower, toupper, tolower... zoiets :P

[ Voor 23% gewijzigd door RobIII op 18-06-2007 16:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
nee dat wordt idd ook in één van mijn linkjes (bovenste) beschreven, maar dat zijn de oplossing die niet in een XE versie gebruikt kunnen worden.

[ Voor 5% gewijzigd door WebTwister op 19-06-2007 08:40 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik kan me niet voorstellen dat dat niet gebruikt kan worden. Dat is behoorlijk standaard SQL. Zou je een stukje van je toepassing kunnen laten zien en aangeven waarom het neit werkt? Op deze manier blijft het namelijk een beetje glazen bol werk.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
Wat ik ervan zie moet het gewoon kunnen. Zie hier.

Waarom denk jij dat het niet kan? Krijg je foutmeldingen?

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
x-force schreef op dinsdag 19 juni 2007 @ 09:05:
Waarom denk jij dat het niet kan? Krijg je foutmeldingen?
Ja, en het is voor mijn doen best wel een ingewikkelde query.. ik heb een voorbeeld gemaakt en daarbij wat dingen weg gehaald die er niet toe doen, of code waarin ik vars aanmaak.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$myquery = "        
    SELECT 
        PRD_CD_REG, 
        UPPER(PRD_NM_NAAM), 
        PRD_DT_GEBOORTE 
    FROM 
        PAARD 
    WHERE                   
        PRD_CD_REG LIKE '%$zoekitem%'
        OR OR PRD_NM_NAAM LIKE '%$allupper%' 
    ORDER BY 
        PRD_NM_NAAM ASC;
";

// tellen
$sqlCount   = " 
    SELECT COUNT(UPPER(PRD_NM_NAAM)) INTO :aantal 
        FROM PAARD 
    WHERE 
        PRD_CD_REG LIKE '%$zoekitem%'
        OR PRD_NM_NAAM LIKE '%$allupper%' 

    ORDER BY PRD_NM_NAAM ASC            
";
$getCount   = oci_parse($connect, $sqlCount);
oci_execute($getCount, OCI_DEFAULT);
$count      = oci_fetch_array($getCount);


// gelimiteerd ophalen
$sqlPaarden = " 
    SELECT * 
    FROM 
        ( SELECT a.*, RowNum as rNum 
        FROM ( $myquery ) a
        WHERE RowNum <= $lastRec )
    WHERE $firstRec <= rNum 
";


levert de volgende foutmelding op
code:
1
2
3
Warning: oci_execute() [function.oci-execute]: ORA-00911: invalid character in D:\WWWRoot\pages\result.php on line 148

Warning: oci_fetch_array() [function.oci-fetch-array]: ORA-24374: define not done before fetch or execute and fetch in D:\WWWRoot\pages\result.php on line 150

Acties:
  • 0 Henk 'm!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
code:
1
2
3
4
5
6
7
8
9
$sqlCount     = " 
    SELECT COUNT(UPPER(PRD_NM_NAAM)) INTO :aantal 
        FROM PAARD 
    WHERE 
        PRD_CD_REG LIKE '%$zoekitem%'
        OR PRD_NM_NAAM LIKE '%$allupper%' 

    ORDER BY PRD_NM_NAAM ASC            
";

Nu ga je de kolom naam in hoofdletters zetten, je moet in de where alles in uppercase zetten. Probeer dit eens:
code:
1
2
3
4
5
6
7
8
9
$sqlCount     = " 
    SELECT COUNT(PRD_NM_NAAM) INTO :aantal 
        FROM PAARD 
    WHERE 
        UPPER(PRD_CD_REG) LIKE '%$zoekitem%'
        OR UPPER(PRD_NM_NAAM) LIKE '%$allupper%' 

    ORDER BY PRD_NM_NAAM ASC            
";

Ik ga er wel vanuit dat $zoekitem en $alluper in hoofdletters zijn.

Kun je trouwens niet direct de query op de XE database uitvoeren? Dan kun je even proberen met gemakkelijke query's en later ombouwen naar php.

[ Voor 4% gewijzigd door x-force op 19-06-2007 10:11 ]

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Die select into doet het vast leuk in het SQL script waar hij uit komt, maar niet in PHP op deze manier.

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
x-force schreef op dinsdag 19 juni 2007 @ 10:10:
Kun je trouwens niet direct de query op de XE database uitvoeren? Dan kun je even proberen met gemakkelijke query's en later ombouwen naar php.
ja da's misschien slimmer idd.. ik ga het één en ander proberen. ik laat weten hoe of wat!

Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
justmental schreef op dinsdag 19 juni 2007 @ 10:15:
Die select into doet het vast leuk in het SQL script waar hij uit komt, maar niet in PHP op deze manier.
ja hoor gaat prima.. want dat komt uit de werkende functie, die wel hoofdlettergevoelig zoekt.
Pagina: 1