[MySql] Problem ze składnią procedury

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

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

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

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

0

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

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