Как использовать результат подготовленного оператора в предложении «если не существует»? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть хранимая процедура с подготовленным оператором, и я хотел бы знать, как использовать результат этого оператора в предложении «если не существует».

Пример процедуры показан ниже.

DROP PROCEDURE IF EXISTS PSCheck;

DELIMITER ;;
CREATE PROCEDURE PSCheck(IN TableName tinytext, IN ColumnName tinytext)
begin
    SET @sc=CONCAT("show columns from ",TableName," like '",ColumnName,"'");
    PREPARE stmt FROM @sc;
    EXECUTE stmt;    

    IF NOT EXISTS (        
        SELECT @sc        
        )    
    THEN
        SELECT 'OK';
    END IF;

  DEALLOCATE PREPARE stmt;
end;
;;

DELIMITER ;

CALL PSCheck('tbl', 'col');

Блок THEN никогда не выполняется независимо от наличия поля.

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете значительно упростить логику:

create procedure PSCheck (
    in in_TableName tinytext,
    in in_ColumnName tinytext
)
begin    
    if exists (select 1 from information_schema.columns where table_name = in_tablename and column_name = in_columnname) then
        select 'OK';
    end if;
end;

Здесь - это дБ <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...