2014-10-14 8 views
0

Я написал одну хранимую процедуру в базе данных MySQL следующим образом:правильный способ, чтобы написать хранимую процедуру в MySQL

CREATE PROCEDURE sp_Test(
    IN Mode  VARCHAR(50), 
    IN UserID INT, 
    .... 
    .... 
) 
BEGIN 
    SET @sqlQuery = ""; 
    IF (Mode = 'Select') THEN 
     //Select query 
    ELSEIF (Mode = 'Update') THEN 
     //update query 
    ELSEIF (Mode = 'Delete') THEN 
     //Delete query 
    END 
END 

и согласно моей потребности я могу назвать это как этот

CALL sp_Test("Select", 1, ...) 
OR 
CALL sp_Test("Update", 1, ...) 
OR 
CALL sp_Test("Delete", 1, ...) 

Это нормально для исполнения? Или я должен писать отдельные хранимые процедуры для каждого режима, как

для отборного

CREATE PROCEDURE sp_Test_Select(
    IN UserID INT, 
    .... 
    .... 
) 
BEGIN 
    //Select query 
END 

для UPDATE

CREATE PROCEDURE sp_Test_Update(
    IN UserID INT, 
    .... 
    .... 
) 
BEGIN 
    //Select query 
END 

ответ

0

На мой взгляд, нет существенной разницы в производительности этих процедур (если вы не собираетесь использовать их сотни раз в секунду 24x7).

Но есть разница в читаемость. Это значительная разница. test_DELETE(item) легче понять, чем test("delete", item). Имейте в виду, что вы пишете код не только для машины, но и для следующего человека, который будет работать над вашим проектом. Используйте вторую альтернативу.

+0

спасибо @ ollie-jones, приветствую ваше предложение, кстати, если мой метод прав, то как хранимая процедура предварительно скомпилирована и выполняется быстрее? –

+0

Oracle прекомпилирует хранимые процедуры (из языков PL/SQL и Java). У MySQL нет. У него есть кеш. –

+0

моя хранимая процедура только кэшируется справа. Итак, что относительно подготовленных заявлений в хранимой процедуре? –

0

Помимо ограничений на производительность (если они вообще имеются); Это всегда рекомендуется иметь отдельные процедуры определены для отдельных операций (select/insert/update/delete), потому что

  1. Это увеличивает Redability.

  2. Ремонтопригодность. отдельная процедура может быть хорошо поддержана, если в будущем все изменения должны быть сделаны.

Рассмотрим, о передаче параметров для различных операций. Для select, скорее всего, вам не нужно передавать какие-либо параметры в процедуру, но для insert, update и delete вам нужно будет передать параметр. Не будет ли беспорядок для вас отличать их в едином учебном теле?

 Смежные вопросы

  • Нет связанных вопросов^_^