Avatar billede fastpoint Nybegynder
27. oktober 2006 - 13:53 Der er 14 kommentarer

SQL virker i Access men ikke Oracle?

Jeg har via. access oprettet forbindelse til en Oracle database.
Det mystiske er, at den SQL access har genereret til udtræk af data ikke fungere i Oracle!

Er syntax forskellig?

F.eks en opbygning som denne ville ikke virke..

SELECT xxxx, xxxx, xxxx FROM ((xxxx INNER JOIN xxxx  ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID
WHERE (((xxxx.CODE) Like "xxxx*" Or (xxxx.CODE) Like "xxxx" AND ((xxxx.CRD)>"20060831" And (xxxx.CRD)<"20061001") AND ((xxxx.DELU) Is Null));

der ville den brokke sig over denne del

FROM ((xxxx INNER JOIN

fejlen er
ORA-00928: manglende SELECT-nøgleord

hvad skyldes dette?
Avatar billede arne_v Ekspert
27. oktober 2006 - 13:57 #1
der skal vel en SELECT ind:

FROM (SELECT * FROM (xxxx INNER JOIN
Avatar billede arne_v Ekspert
27. oktober 2006 - 13:58 #2
SELECT xxxx, xxxx, xxxx FROM (SELECT * FROM (xxxx INNER JOIN xxxx  ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID
WHERE (((xxxx.CODE) Like "xxxx*" Or (xxxx.CODE) Like "xxxx" AND ((xxxx.CRD)>"20060831" And (xxxx.CRD)<"20061001") AND ((xxxx.DELU) Is Null)) temp;
Avatar billede fastpoint Nybegynder
27. oktober 2006 - 14:03 #3
Hvis jeg gør som der får jeg samme fejl igen.. hvis jeg rykker SELECT * FROM ind i parantesen siger den manglende højreparantese. Som her

SELECT xxxx, xxxx, xxxx FROM ((SELECT * FROM  xxxx INNER JOIN xxxx  ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID
WHERE (((xxxx.CODE) Like "xxxx*" Or (xxxx.CODE) Like "xxxx" AND ((xxxx.CRD)>"20060831" And (xxxx.CRD)<"20061001") AND ((xxxx.DELU) Is Null)) temp;
Avatar billede fastpoint Nybegynder
27. oktober 2006 - 14:49 #4
Det ser ud til at fungere sådan

SELECT xxxx, xxxx, xxxx FROM xxxx, xxxx,xxxx,xxxx WHERE xxxx.ID = CDMCA2C.PRIMCAMP AND xxxx.ID = xxxx.ID AND xxxx.ID = xxxx.ID
AND xxxx.CODE Like 'xxxx*' Or xxxx.CODE Like 'xxxx' AND xxxx.CRD >'20060831' And xxxx.CRD < '20061001' AND xxxx.DELU Is Null;

hvis de da henter det samme data
Avatar billede trer Nybegynder
27. oktober 2006 - 14:51 #5
Hej Fastpoint

Ændr lige dine access wildcards til korrekte wildcards - dvs * bliver til % og ? til
_

Ellers får du nok ikke samme antal rækker ud...
Avatar billede fastpoint Nybegynder
27. oktober 2006 - 14:56 #6
hej trer

jeg har ændret mine * til %
havde ikke nogle ? tegn i sql'en.
ser lige på data'en=)
Avatar billede fastpoint Nybegynder
28. oktober 2006 - 10:48 #7
trer jeg vil gerne give dig 50point hvis du ligger et svar.

når man modtager denne fejl
ORA-01652: kan ikke udvide temp segment med 64 i tabelområdet TEMP

løber den tør for plads? og hvad gør man?
Avatar billede trer Nybegynder
28. oktober 2006 - 13:31 #8
Giv dem til de andre - de har været mere aktive på at besvare.

Mht temp segmentet - du skal udvide tabellens antal segmenter. kan desværre ikke huske syntaks længere. Er for rusten på oracle :-(
Avatar billede fastpoint Nybegynder
28. oktober 2006 - 13:40 #9
i første omgang vil jeg prøve om ikke det kan undgåes helt når man programmere op imod det i C#.

SQL virker fint i Access det er vel fordi den benytter sig af sin interne plads.

måske virker det på samme måde i C# (ADO.NET)
Avatar billede trer Nybegynder
28. oktober 2006 - 14:15 #10
Grunden til at du ikke oplever sådanne ting i access er, at det er en meget primitiv enkeltbrugerdatabase hvor plads styres dynamisk (bortset fra at den er meget dårlig til at genbruge plads - derfor vokser Access altid og ender altid med at være korrumperet).

Og hvad programmeringssprog du anvender i fht Oracle er dybt ligegyldigt i fht hvordan databasen opfører sig. Du må leve med at Oracle nok er den databaseplatform der kræver mest driftsviden og -kompentancer. Desværre...
Avatar billede kjulius Novice
28. oktober 2006 - 23:02 #11
Jeg er lidt nysgerrig. Får du samme resultat hvis du bare fjerner nogle af de skrækkelige paranteser, som Access er så glad for, og overlader prioriteringen af tabelrækkefølgen til Oracle:

SELECT xxxx, xxxx, xxxx
FROM xxxx INNER JOIN xxxx  ON xxxx.ID = xxxx.ID
INNER JOIN xxxx ON xxxx.ID = xxxx.ID
INNER JOIN xxxx ON xxxx.ID = xxxx.ID
WHERE xxxx.CODE Like "xxxx%" Or (xxxx.CODE Like "xxxx%" AND xxxx.CRD>"20060831" And xxxx.CRD<"20061001" AND xxxx.DELU Is Null);

Jeg er ikke helt sikker på, om den resterende parantes er sat rigtigt, da dit oprindelige WHERE udtryk ikke har et matchende sæt af "(" og ")" og således ikke kan være korrekt. Der er nok sket en typografisk fejl under "efterbehandlingen". :-)
Avatar billede fastpoint Nybegynder
30. oktober 2006 - 14:06 #12
hej kjulius
det er afprøvet men så kommer denne fejl.
SQL-kommando er ikke korrekt afsluttet
og stjerne ud for den første inner join efter FROM.

Jeg tror ikke helt at det som jeg testede tidligere giver det korrekte data

Kommentar: fastpoint
27/10-2006 14:49:01
Avatar billede fastpoint Nybegynder
30. oktober 2006 - 14:08 #13
hej trer

jeg mente heller ikke programmeringssproget, men mere udviklingsmiljøet=)
der er en helt del databasefaciliteter indbygget i visual studio så håbede lidt på det fungere lidt som access
Avatar billede trer Nybegynder
30. oktober 2006 - 19:42 #14
Som sagt - desværre. Databasen er ret ligeglad med hvad du skriver din applikation i.

Men et par andre ting; Du skal lige være opmærksom på at Oracle *ikke* overholder SQL92 standarden på et meget væsenligt punkt. En tom streng i en VARCHAR2 svarer til en NULL værdi. I SQL92 - og i Access - er en tom streng forskellig fra en NULL værdi.

Dvs. at hvis kolonnen DELU indeholder '' vil den i Oracle returnere TRUE på "IS NULL". Det gør den ikke i Access.

Derudover - når du blander AND og OR i SQL - så bør du altid omfatte delene med (). Der er stor forskel på om du skriver (udtryk and udtryk) or (udtryk) eller (udtryk) and (udtryk or udtryk)...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester