Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] uzycie SELECT LAST_INSERT_ID() jako zmienna w procedurze
kenobi13
post 3.03.2010, 09:17:14
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 13.07.2009
Skąd: Ziemia

Ostrzeżenie: (0%)
-----


Witam, czy da się użyć SELECT LAST_INSERT_ID() jako zmienną w procedurze? Z procedurami zacząłem dopiero dzisiaj rano, więc nie wiele wiem. Szukałem, ale nie znalazłem. Oto mój kod:
  1. DELIMITER //
  2. CREATE PROCEDURE `eobaru`.`add_new_topic` (in_forum_id INT, in_author_id INT, in_subject VARCHAR(128), in_body TEXT)
  3. BEGIN
  4. START TRANSACTION;
  5. INSERT INTO topics (forum_id, name, author_id) VALUES (in_forum_id, in_subject, in_author_id);
  6. DECLARE _topic_id INT;
  7. SET _topic_id = SELECT LAST_INSERT_ID();
  8. INSERT INTO posts (topic_id, author_id, date, revision_id, revisions, body) VALUES (_topic_id, in_author_id, NOW(), 1, 1, in_body);
  9. SELECT LAST_INSERT_ID() AS _post_id;
  10. INSERT INTO post_revisions (post_id, revision_id, date, body, editor) VALUES (_post_id, 1, NOW(), in_body, in_author_id);
  11. UPDATE topics SET first_post_id = _post_id, last_post_id = _post_id WHERE id = topic_id;
  12. UPDATE profile SET post_count = post_count + 1, topic_count = topic_count + 1 WHERE id = in_author_id;
  13. COMMIT;
  14. END//

A oto błąd, który mi wywala:
Cytat
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 'DECLARE _topic_id INT;
SET _topic_id = SELECT LAST_INSERT_ID();
INSERT I' at line 5

Da się to jakoś naprawić?
Go to the top of the page
+Quote Post
thek
post 3.03.2010, 09:35:28
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Wyciąg z manuala:
"DECLARE is allowed only inside a BEGIN ... END compound statement and must be at its start, before any other statements."
Zwróć uwagę na drugą połowę zdania, zaczynającą się od słowa "must" smile.gif

EDIT: jeśli nie rozumiesz, to przesuń wyżej DECLARE i zobacz czy teraz zadziała winksmiley.jpg

Ten post edytował thek 3.03.2010, 09:42:33


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
kenobi13
post 3.03.2010, 09:39:43
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 13.07.2009
Skąd: Ziemia

Ostrzeżenie: (0%)
-----


No dobra, teraz mi wywala:
Cytat
ERROR 1064 (42000): 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 'SELECT LAST_INSERT_ID();
INSERT INTO posts (topic_id, author_id, date, revis' at line 6

EDIT: Declare dałem zaraz po BEGIN]
EDIT2: Problem rozwiązany, wystarczyło dać SELECT LAST_INSERT_ID() w nawiasie, czyli coś takiego:
  1. SET _topic_id = (SELECT LAST_INSERT_ID());

No, i oczywiście dać tą deklaracje zaraz pod BEGIN

Ten post edytował kenobi13 3.03.2010, 16:37:27
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:48