Чи існує альтернатива "Створити або замінити процедуру" в MySQL?


16

Чи існує версія "створити або замінити процедуру" для MySQL? Я, здається, не можу це зробити або скриптувати скасування процедури, якщо вона існує до повторної компіляції, не отримуючи повідомлення про помилку, що зберігається процедура.

DELIMITER $$

-- would love to be able to drop procedure if exists db.sp_tmp_90days;  
-- or use "create or replace"

create procedure db.sp_tmp_90days()

BEGIN
drop table db.tmp_90days;

create table db.tmp_90days ( 
    user_name varchar(128), 
    first_name varchar(50), 
    last_name varchar(50), 
    system varchar(10), 
    last_login datetime 
);

alter table db.tmp_90days add index idx_user_name(user_name);
alter table db.tmp_90days add index idx_system(system);
alter table db.tmp_90days add index idx_last_login(last_login);

insert into db.tmp_90days (user_name, first_name, last_name, system, last_login)
    SELECT
        [...]
END $$

Відповіді:


20

Це синтаксис, який потрібно скинути, якщо він існує

DROP PROCEDURE IF EXISTS db.sp_tmp_90days;

3
Можна також згадати, що MariaDB, "заміна, що випадає" для MySQL, підтримує CREATE OR REPLACE PROCEDUREсинтаксис з версії 10.1.
dbdemon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.