我有一个函数,我正在检查表和列是否存在。如果退出,那么我需要更改表。
delimiter $$
create function column_exists(ptable varchar(300), pcolumn varchar(100))
returns CHAR
reads sql data
begin
declare result CHAR(1);
select
if(count(1)>=1,'Y','N')
into
result
from
information_schema.columns
where
table_schema = 'schema' and
table_name = ptable and
column_name = pcolumn ;
return result;
end $$
但是我在使用该函数时遇到错误:
SET @column_exists := column_exists('table_name', 'column_name');
IF @column_exists = 'Y' THEN
ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP(3) DEFAULT '2019-01-01 00:00:00' NOT NULL;
ELSE
SELECT 'Column does not exist';
END IF;
错误:
SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF @column_exists = 'Y' THEN
ALTER TABLE table_name MODIFY COLUMN column_na' at line 3
Error position: line: 2
请指导解决问题。谢谢。
MySQL 不直接支持在存储过程、函数或查询之外使用 IF 语句。 您必须将其包含在存储过程中:
delimiter $$
create procedure column_(IN aux varchar(1), ptable varchar(300), pcolumn varchar(100))
begin
IF (aux = 'Y') THEN
SET @sql_query = CONCAT('ALTER TABLE ', ptable, ' MODIFY COLUMN ', pcolumn, ' TIMESTAMP(3) DEFAULT ''2019-01-01 00:00:00'' NOT NULL');
PREPARE stmt FROM @sql_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Column does not exist';
END IF;
end $$
并这样称呼它:
SET @column_exists := column_exists('table_name', 'column_name');
call column_(@column_exists, 'table_name', 'column_name');