Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: aktualizowanie bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
krzyszbi
witam
mam taki problem a mianowicie
mam sobie bazę
w niej stworzona funkcję zwracającą dane o niej
na podstawie tej funkcji sprawdzam czy aktualizacja jest przeznaczona dla tej bazy
i teraz czy jest możliwość aby po sprawdzeniu wyjść z wykonywanego skryptu sql
skrypt będzie odpalany albo z phpMyAdmin-a albo z linii poleceń
ogólnie chodzi mi o cos takiego
  1. IF getDbName()!='test' THEN exit sq; script;
  2. END IF;
  3. -- a tu reszta skryptu sql do wykonania


da się coś takiego w mysql-u osiągnąć questionmark.gif szukam po dokumentacji ale jakoś nie mogę znaleźć jak if-a poza SELECT-em wykorzystać
vokiel
  1. USE `nazwa_bazy`;


Jeśli baza nie istnieje dostaniesz błąd:
Kod
Error Code : 1049
Unknown database 'nazwa_bazy'
krzyszbi
no ok ale baza zawsze bedzie istnieć
chodzi mi o coś co pozwoli w skrypcie zatrzymać jego dalsze wykonywanie
ogólnie przerwanie wykonywania skryptu aql po wykryciu niezgodności
[sql]
DROP PROCEDURE IF EXISTS `checkUpdate`;
delimiter /%2

no ok ale baza zawsze bedzie istnieć
chodzi mi o coś co pozwoli w skrypcie zatrzymać jego dalsze wykonywanie
ogólnie przerwanie wykonywania skryptu aql po wykryciu niezgodności
[sql]
DROP PROCEDURE IF EXISTS `checkUpdate`;
delimiter /%2
vokiel
To może odwrotnie warunek:
  1. IF getDbName()='test' THEN
  2. # reszta
  3. END IF;
krzyszbi
no ok ale baza zawsze bedzie istnieć
chodzi mi o coś co pozwoli w skrypcie zatrzymać jego dalsze wykonywanie
ogólnie przerwanie wykonywania skryptu aql po wykryciu niezgodności
  1. DROP PROCEDURE IF EXISTS `checkUpdate`;
  2. delimiter //
  3. CREATE PROCEDURE checkUpdate(IN dbname VARCHAR(125))
  4. BEGIN
  5. IF dbname!=getDbName() THEN
  6. SELECT COUNT(*) FROM `total`; -- błędne zapytanie i tu chę kończyc działanie skryptu sql
  7. END IF;
  8. END;
  9. delimiter ;

i wykozystanie
  1. USE baza_dev_test;
  2. INSERT INTO `baza_dev_test`.`test` ( `id` , `name` ) VALUES ( NULL , 'Pierwszy insert po wyborze bazy' );
  3. CALL checkUpdate('test_dev');
  4. INSERT INTO `baza_dev_test`.`test` ( `id` , `name` ) VALUES ( NULL , 'Indert po prawidłowo wykonanej procedurze, powinien się dodać ' );
  5. CALL checkUpdate('test_ded');
  6. -- nie taka baza ( lub wersja, zależnie co bedę sprawdzał ) i chę aby zakończył działanie
  7. INSERT INTO `baza_dev_test`.`test` ( `id` , `name` ) VALUES ( NULL , 'Niewykonany insert po procedurze z crash-em' );

wywołanie
Kod
mysql> source c:/sql.sql;
Database changed
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
ERROR 1146 (42S02): Table baza_dev_test.total' doesn't exist //ok tu się wywala bo tak ma byc :)
Query OK, 1 row affected (0.00 sec) //ale juz tego nie chcę aby wykonywał

da się cos takiego osiągnąć?? i jeśli tak to już prawie jestem w domu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.