我有一个问题,我的函数仅在我不使用传递的参数时才起作用。
这是我想要工作的代码:
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(schemaName varchar(100), tableName varchar(100), omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE res VARCHAR(5000) DEFAULT "";
DECLARE col VARCHAR(200);
DECLARE cur1 CURSOR FOR
select COLUMN_NAME from information_schema.columns
where table_schema = @schemaName AND table_name = @tableName AND FIND_IN_SET(COLUMN_NAME, @omitColumns) = 0 ORDER BY ORDINAL_POSITION;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO col;
IF NOT done THEN
set res = CONCAT(res,IF(LENGTH(res)>0,",",""),col);
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
RETURN res;
END
这是当我用文字字符串替换参数时起作用的代码:
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(schemaName varchar(100), tableName varchar(100), omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE res VARCHAR(5000) DEFAULT "";
DECLARE col VARCHAR(200);
DECLARE cur1 CURSOR FOR
select COLUMN_NAME from information_schema.columns
where table_schema = 'test' AND table_name = 'employees' ORDER BY ORDINAL_POSITION;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO col;
IF NOT done THEN
set res = CONCAT(res,IF(LENGTH(res)>0,",",""),col);
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
RETURN res;
END