Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tworzenie procedury MYSQL w migracjach Laravel 4

Z Twoim kodem są dwa główne problemy

  1. DELIMITER nie jest poprawną instrukcją sql. To tylko polecenie klienta MySql. Więc po prostu go nie używaj. Przy okazji błąd, który otrzymasz, mówi dokładnie to.
  2. Nie możesz użyć DB::statement wykonać CREATE PROCEDURE kod, ponieważ używa przygotowanej instrukcji źródło kod dla Connection . Możesz użyć PDO exec() DB::connection()->getPdo()->exec() zamiast tego

Biorąc to pod uwagę, przykładowa migracja wyimaginowanych tags tabela może wyglądać tak

class CreateTagsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tags', function($table){
            $table->increments('id');
            $table->string('name')->unique();
        });
$sql = <<<SQL
DROP PROCEDURE IF EXISTS sp_insert_tag;
CREATE PROCEDURE sp_insert_tag(IN _name VARCHAR(32))
BEGIN
    INSERT INTO `tags`(`name`) VALUES(_name);
END
SQL;
        DB::connection()->getPdo()->exec($sql);
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        $sql = "DROP PROCEDURE IF EXISTS sp_insert_tag";
        DB::connection()->getPdo()->exec($sql);
        Schema::drop('tags');
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wywołaj prostą procedurę bazy danych za pomocą Slick 3.0

  2. Uwierzytelnianie Windows za pomocą MySQLdb w Pythonie

  3. Pokazywanie postów subskrybenta i własnych postów użytkownika

  4. Czy kolejność kolumn w instrukcji SELECT wpływa na szybkość zapytań?

  5. Jaka jest najlepsza wydajność pobierania wyników MySQL EAV jako tabeli relacyjnej?