Autor Zpráva
Macro
Profil
zdravím,
potrebujem vytvoriť procedúru v MySQL databáze. Môj kód vyzerá takto

CREATE  OR REPLACE PROCEDURE `upd_sk`(ct int, mnoz int)
  BEGIN
    BEGIN     
      UPDATE `skladova_karta` SET `aktualny_stav` = aktualny_stav + mnoz WHERE `cislo_karty` = `ct`;
    END;
  END `upd_sk`;


Avšak phpMyAdmin ohlási
#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 'PROCEDURE `upd_sk`(ct int, mnoz int)
  BEGIN
    BEGIN    
      UPDATE `skl' at line 1 


Skúšal som už rôzne variacie, ale ani raz sa mi to nepodarilo vytvoriť. Nepomohol by mi niekto s týmto. Zrejme bude chyba v kóde procedúry, ale ja už neviem kde.

PS: Mysql: 5.1.37, phpMyAdmin 3.2.0.1


Vopred ďakujem
TomášK
Profil
MySQL nezná u procedury 'OR REPLACE', viz http://dev.mysql.com/doc/refman/5.0/en/create-procedure.htmlhtml. Řeším to tak, že před to dám ještě řádek DROP PROCEDURE IF EXISTS. A pozor na oddělovače, měl by být nastavený jiný než středník, aby se to nepletlo se středníky uvnitř procedury.
Kajman_
Profil *
A ct asi není sloupec, tak nemá být ve zpětných apostrofech.
Macro
Profil
Super, ďakujem veľmi pekne už to ide, kompletný kód pre niekoho kto bude mať podobný problém

DROP PROCEDURE IF EXISTS `upd_sk` /
CREATE PROCEDURE `upd_sk`( ct int, mnoz int)
  BEGIN
    BEGIN     
      UPDATE `skladova_karta` SET `aktualny_stav` = `aktualny_stav` + mnoz WHERE `cislo_karty` = ct;
    END;
  END;


oddeľovač /
Kcko
Profil
Na co 2x BEGIN a proc takovyto kod musi byt v procedure?
Macro
Profil
Mal som v škole urobiť jeden projekt cez Oracle databázu (nejaký jednoduchý sklad). Tento semester som mal urobiť jednoduchý obchod, tak som využil staré zadanie, a keďže som nemal už prístup na Oracle server a nechcelo sa mi to vybavovať migroval som na MySQL, a snažil sa poupravovať kódy, a v Oracli si musel mať na konci END názov procedúri, v mysql to tak nešlo, a skúšal som rôzne veci, a takto to vzalo a funguje, už som to neoptimalizoval, keďže koniec semestra sa blíži, a musím k tomu urobiť ešte dokumentáciu a čaká ma ešte jeden projekt.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0