Avatar billede caho Nybegynder
18. december 2008 - 19:46 Der er 13 kommentarer

SQL-kommando er ikke korrekt afsluttet

Hej
Jeg sidder med "Database System Concepts" af Silberschatz og forsøger at lære noget SQL. Jeg benytter Oracle SQL Developer og til formålet er der oprettet en database der er magen til den der bliver brugt som eksempel i bogen.

Jeg har dog rendt ind i nogle problemer angående omdøbning. Her er et eksempel taget direkte fra bogen som SQL developer ikke accepterer. Jeg får fejlen "SQL-kommando er ikke korrekt afsluttet":

Håber i kan hjælpe mig
Mvh Carsten

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance)
      FROM account
      GROUP BY branch_name)
      AS branch_avg(branch_name, avg_balance)
WHERE avg_balance > 1200
Avatar billede arne_v Ekspert
18. december 2008 - 20:05 #1
Det er ikke bare det afsluttende semikolon som mangler ?
Avatar billede arne_v Ekspert
18. december 2008 - 20:06 #2
proev ogsaa:

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name)
      AS branch_avg
WHERE avg_balance > 1200
Avatar billede arne_v Ekspert
18. december 2008 - 20:06 #3
og hvorfor ikke:

SELECT branch_name, AVG (balance) AS avg_balance
FROM account
GROUP BY branch_name
HAVING avg_balance > 1200

?
Avatar billede caho Nybegynder
18. december 2008 - 20:10 #4
Den HAVING det er bare fordi jeg sidder og laver nogle opgaver hvor man ikke skal bruge HAVING. Så må jeg jo pænt lade være :)

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name)
      AS branch_avg
WHERE avg_balance > 1200

Virker desværre heller ikke. Her er fejl meddelelsen i sit hele:

Error starting at line 1 in command:
SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name)
      AS branch_avg
WHERE avg_balance > 1200
Error at Command Line:5 Column:6
Error report:
SQL Error: ORA-00933: SQL-kommando er ikke korrekt afsluttet
00933. 00000 -  "SQL command not properly ended"
*Cause:   
*Action:
Avatar billede arne_v Ekspert
18. december 2008 - 20:11 #5
Ogsaa med semikolon ?
Avatar billede caho Nybegynder
18. december 2008 - 20:19 #6
SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name);
      AS branch_avg
WHERE avg_balance > 1200

Giver mig følgende:

BRANCH_NAME    AVG_BALANCE           
--------------- ----------------------
Round Hill      350                   
Mianus          700                   
Perryridge      650                   
Redwood        700                   
Brighton        750                   
Central        850                   
Downtown        515                   
North Town      625                   

8 rows selected


Error starting at line 5 in command:
AS branch_avg
Error report:
Unknown Command

Error starting at line 6 in command:
WHERE avg_balance > 1200
Error report:
Unknown Command
Avatar billede arne_v Ekspert
18. december 2008 - 20:28 #7
ikke

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name);
      AS branch_avg
WHERE avg_balance > 1200

men

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name)
      AS branch_avg
WHERE avg_balance > 1200;
Avatar billede caho Nybegynder
18. december 2008 - 20:48 #8
Ah ok. Jeg synes ikke jeg har oplevet at skulle bruge semikolon i de her simple forsøg før. Semikolon til sidst giver mig samme fejl som min indledende post.

Er er account et keyword? det bliver farvet blåt i SQL Developer, men det er en tabel i databasen.

Forsøgte mig også lige med:
SELECT max(tot_balance)
FROM (SELECT branch_name, sum(balance) AS tot_balance
      FROM account
      GROUP BY branch_name)
      AS branch_total(branch_name, tot_balance

Hvilket giver samme fejl. Kan åbenbart ikke navngive på den måde.
Avatar billede arne_v Ekspert
18. december 2008 - 20:55 #9
Hvis du har mistanke om at noget er et reserveret ord, sa aproev og put det i double quotes.
Avatar billede caho Nybegynder
18. december 2008 - 21:01 #10
Det var desværre heller ikke det.
Avatar billede mireigi Novice
18. december 2008 - 22:10 #11
Hvad sker der hvis du skriver således:

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name)
WHERE avg_balance > 1200;

Teknisk set burde dette være nok (ingen nestede selects):
SELECT branch_name, AVG(balance) AS avg_balance
      FROM account
WHERE avg_balance > 1200
GROUP BY branch_name;
Avatar billede caho Nybegynder
19. december 2008 - 12:26 #12
Hej. Jeg har haft problemer med at poste på eksperten, derfor det sene svar.

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name)
WHERE avg_balance > 1200;

Fungerer. Men jeg har brug for at navngive den tabel der bliver skabt af den indre selektion til en mere kompliceret opgave. Tror jeg nok, jeg sidder ikke lige med det her så jeg vil undersøge det næremere i aften. Men det undrer mig at man ikke kan gøre det som eksemplet fra bogen, der bygger på 2003 standarden - Men der kan selvfølgelig godt være forskelle mellem implementeringer alligevel.
Avatar billede soeldk Nybegynder
15. januar 2009 - 13:52 #13
Problemet er at du vil omdøbe en tabel ved hjælp af keywordet AS. AS bruges til at omdøbe kolonnenavne hvorimod der ikke skal bruges noget keyword for at omdøbe et tabelnavn. Følgende stump skulle gerne virke.

SELECT branch_name, avg_balance
FROM (SELECT branch_name, AVG (balance) AS avg_balance
      FROM account
      GROUP BY branch_name)
      branch_avg
WHERE avg_balance > 1200
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