MySQL 中的 Create Function 语句有问题
Problem with Create Function statement in MySQL
我正在尝试在 MySQL 中创建一个函数,该函数将 return 一个基于字段中特定字符串的存在的值。我的 select 语句最终需要多次进行此评估,因此我想创建一个函数以提高效率。这是我的代码:
create function [dbname].id_datasource
(descval varchar(100))
returns varchar(10)
begin
declare datasource varchar(10) default ''
select datasource =
case when descval like 'CLT%' or descval like '%CLT%' then 'CLT'
when descval like 'PCB%' or descval like '%PCB%' then 'PCB'
else 'NA' end
return (datasource)
end
我收到这个错误:
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 'select datasource =
case when descval like 'CLT%' or descval like '%CLT%' th' at line 6
注意:它要求我为我的函数输入数据库名称前缀 - 它 returns 'no database selected' 没有它 - 我确实用我的长数据库名称替换了上面的 [dbname]。
你有语法问题:
- 每个语句末尾缺少
;
。
- 使用
SET
分配一个变量。
DELIMITER $$
create function [dbname].id_datasource (descval varchar(100))
returns varchar(10)
begin
declare datasource varchar(10) default '';
SET datasource =
case
when descval like '%CLT%' then 'CLT'
when descval like '%PCB%' then 'PCB'
else 'NA'
end;
return datasource;
end
$$
DELIMITER ;
不需要同时拥有 LIKE 'CLT%'
和 LIKE '%CLT%'
,因为匹配 CLT%
的任何内容也将匹配 %CLT%
.
我正在尝试在 MySQL 中创建一个函数,该函数将 return 一个基于字段中特定字符串的存在的值。我的 select 语句最终需要多次进行此评估,因此我想创建一个函数以提高效率。这是我的代码:
create function [dbname].id_datasource
(descval varchar(100))
returns varchar(10)
begin
declare datasource varchar(10) default ''
select datasource =
case when descval like 'CLT%' or descval like '%CLT%' then 'CLT'
when descval like 'PCB%' or descval like '%PCB%' then 'PCB'
else 'NA' end
return (datasource)
end
我收到这个错误:
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 'select datasource = case when descval like 'CLT%' or descval like '%CLT%' th' at line 6
注意:它要求我为我的函数输入数据库名称前缀 - 它 returns 'no database selected' 没有它 - 我确实用我的长数据库名称替换了上面的 [dbname]。
你有语法问题:
- 每个语句末尾缺少
;
。 - 使用
SET
分配一个变量。
DELIMITER $$
create function [dbname].id_datasource (descval varchar(100))
returns varchar(10)
begin
declare datasource varchar(10) default '';
SET datasource =
case
when descval like '%CLT%' then 'CLT'
when descval like '%PCB%' then 'PCB'
else 'NA'
end;
return datasource;
end
$$
DELIMITER ;
不需要同时拥有 LIKE 'CLT%'
和 LIKE '%CLT%'
,因为匹配 CLT%
的任何内容也将匹配 %CLT%
.