[MySql] Problem ze składnią procedury

Odpowiedz Nowy wątek
2006-09-27 22:46
0

Czesc

Mam tego typu problem:
opis: Procedura kopipuje dane z tabel tymczasowych TescasesTMP oraz
TestcasesversionsTMP do tabel oryginalnych

Jak ją puszcze to uzyskuję błąd 1064 - synax error .... use near delcare...
at line 3.
Gdzie robię błąd w składni tej procedury? Pomóżcie.

Create procedure upTMP()
begin
declare nrIDcase INT;
declare nrIDver INT;
declare lcase INT;
declare x INT;
set nrIDcase =(select Max(c.ID) from testcases c);
set nrIDver =(select Max(cv.ID) from testcasesversions cv);
set x =(select sv.ID from testscriptsversions sv where sv.title like "Copy
of%");
Loop
set lCase =(select Count(ID) from testcasesTMP);
update tescasesTMP set ID=nrIDcase,
ProductID=(select s.productID from testscripts s,
tesscriptsversions sv
where s.ID=sv.testcaseID and sv.title
like "Copy of%"),
CreationDate = now();
update tescasesversionsTMP set ID =nrIDver,
testcaseID=nrIDcase,
title=(select sv.title from
testscriptsversions sv where
sv.title like "Copy of%")+" "+lCase,
Content ="",
MajorVersion=0,
MinorVersion=1,
Version="v0.1",
DocumentID="TCA"+nrIDcase+"-0.1",
AuthorID=2,
CreationDate= now();
end loop


Mam tez male pytanko: Czy w ogole moge to napisac bez pierwszej linii -
czyli tak aby nie była to procedura tylko cos w rodzaju skryptu?

POzdrawiam
Zuzanna

Pozostało 580 znaków

2006-09-27 23:38
0

A gdzie wykonujesz to zapytanie?

sprobuj to wszystko opakowac w

delimiter //
--definicja procedury
//

Znacznikiem konca zapytania (delimiter) w mysql jest domyslnie ;, wiec prawdopodobnie po pierwszy declare mysql sadzi, ze to koniec zapytania i stara sie je wykonac - co oczywiscie konczy sie bledem (bo definicja procedury nie jest zamknieta).

To cos u gory zmienia znacznik konca na //, wiec dopiero po tym zestawie znakow i enterze mysql bedzie wykonywal to co zostalo wpisane. Jak nie ma innych bledow to powinno pojsc.

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-09-28 22:40
0

Dzieki za szybką odpowiedz. Sprawdzę to jutro i dam znac:)
Wykonuje to z poziomu phpmyadmin - to dla mnie nowe narzedzie na wersji 5.0 myslq.
Pozdr

Pozostało 580 znaków

2006-09-30 21:34
0

Witam. PO zastosowaniu Twoich rad procedura wygląda jak poniżej. Niestety błąd ciągle jest - umieściłam go poniżej. Czy możliwe jest aby np w phpmyadmin nie można było budować procedur??
Będę wdzięczna za pomoc.

Delimiter //
Create procedure upTMP ()
BEGIN
declare nrIDcase INT;
declare nrIDver INT;
declare lCase INT;

set nrIDver = (select Max(cv.ID) from testcasesversions cv);
set lCase = (select count(ID) from testcasesTMP);
set nrIDcase = (select Max(c.Id) from testcases c);

LOOP
update testcasesTMP set ID=nrIDcase,
ProductID= (select s.productID from testscripts s, testscriptsversions sv where
s.id=sv.testscriptID and sv.tltle like "Copy of%"),
CreationDate = now();
update testcasesversionsTMP set ID = nrIDver,
testcaseID = nrIDcase,
title = (select sv.title from testscriptsversions sv where sv.title like "Copy of%")

  • " "+ lCase,
    Content = "",
    MajorVersion = 0,
    MinorVersion = 1,
    Version = "v0.1",
    documentID= "TCA"+ nrIDCase+"-0.1" ,
    authorid=2,
    creationdate= now();
    lCase= lCase-1
    END LOOP;
    end //

A oto błąd który dostaję:
Błąd
Wygląda na to, że w twoim zapytaniu SQL jest błąd. W znalezieniu przyczyny problemu może pomóc także - jeśli się pojawi - poniższy opis błędu serwera MySQL.

ERROR: Nieznany znak przestankowy @ 11
STR: //
SQL: Delimiter //
create procedure upTMP()
BEGIN
declare nrIDcase INT;

zapytanie SQL:

Delimiter // create procedure upTMP() BEGIN declare nrIDcase INT;

MySQL zwrócił komunikat:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Delimiter //
create procedure upTMP()
BEGIN
declare nrIDcase INT' at line 1

Pozostało 580 znaków

2006-09-30 21:58
0

ale Delimiter // miało być po begin a przed declare


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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