请大家帮个忙,帮俺看看set global log_bin_trust_function_creators = 1; -- 这句干嘛用的,我也不知道?加上总不会有问题
DROP FUNCTION IF EXISTS FUN_GETCODENAME; -- 删掉已经存在的
DELIMITER $$ -- 定义分隔符,必须要有,可以不是$$
CREATE FUNCTION FUN_GETCODENAME(
STRCODETYPE CHAR(3)
, STRCODEID VARCHAR(10)
) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型RETURNS VARCHAR(50) -- 指定返回值类型,如果你不确定返回文本长度,可以使用textBEGIN
DECLARE str varchar(50) default ''; -- 定义一个变量,可以指定默认值
SELECT CODE_NAME INTO @STR FROM S_CODE WHERE TYPE_ID = @STRCODETYPE AND CODE_ID = @STRCODEID; -- 设置改边变量的值
RETURN str; -- 返回值
END $$ -- 注意看清楚了,这个end后面有你在前面定义的分割符号DELIMITER $$ -- 好,这里结束。
DROP FUNCTION IF EXISTS FUN_GETCODENAME; -- 删掉已经存在的
DELIMITER $$ -- 定义分隔符,必须要有,可以不是$$
CREATE FUNCTION FUN_GETCODENAME(
STRCODETYPE CHAR(3)
, STRCODEID VARCHAR(10)
) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型RETURNS VARCHAR(50) -- 指定返回值类型,如果你不确定返回文本长度,可以使用textBEGIN
DECLARE str varchar(50) default ''; -- 定义一个变量,可以指定默认值
SELECT CODE_NAME INTO @STR FROM S_CODE WHERE TYPE_ID = @STRCODETYPE AND CODE_ID = @STRCODEID; -- 设置改边变量的值
RETURN str; -- 返回值
END $$ -- 注意看清楚了,这个end后面有你在前面定义的分割符号DELIMITER $$ -- 好,这里结束。
解决方案 »
- 求分组计算 sql group by语句,内详
- 求一条SQL语句,请高手赐教!
- 急。。。在线等,请教Mysql 的old_password 密码加密问题,谢谢!!!
- 为什么执行create table t1 like t2执行了55秒钟?求思路,求想法
- mysql 是否有创建文件夹的语句?
- mysql的text字段类型用来存放文章的话长度设置成多少合适还是不用设?
- 在MySQL执行任何SQL,都提示下列错误,请问是和原因
- mysql 用命令createdb 建数据库的问题
- 从SQLServer中导入数据!
- mysql++使用的问题--求救各路大牛!!
- 怎么分组查询第N大值? (问题尚未解决)
- 初次接触MySQL,请教一下,Workbench中建表时没有nvarchar类型可选?
log_bin_trust_function_creators=1
mysql中的ERROR 1418错误,不能创建MySQL函数
2、语法没有问题,什么问题
corresponds to your MySQL server version for the right syntax to use near ';
DROP FUNCTION IF EXISTS FUN_GETCODENAME;
DELIMITER' at line 1
Query OK, 0 rows affected (0.08 sec)
DROP FUNCTION IF EXISTS FUN_GETCODENAME;
能否成功,如不能成功,去掉此句,
OR
直接
DROP FUNCTION FUN_GETCODENAME;
升级到高版本
查了一下MYSQL 5。.0的HELP,支持
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name
http://dev.mysql.com/doc/refman/5.0/en/drop-procedure.html
Version Introduced 5.0.16
Command-Line Format --log-bin-trust-function-creators
Option-File Format log-bin-trust-function-creators
Option Sets Variable Yes, log_bin_trust_function_creators
Variable Name log_bin_trust_function_creators
Variable Scope Global
Dynamic Variable Yes
Permitted Values
Type boolean
Default FALSE This variable applies when binary logging is enabled. It controls whether stored function creators can be trusted not to create stored functions that will cause unsafe events to be written to the binary log. If set to 0 (the default), users are not permitted to create or alter stored functions unless they have the SUPER privilege in addition to the CREATE ROUTINE or ALTER ROUTINE privilege. A setting of 0 also enforces the restriction that a function must be declared with the DETERMINISTIC characteristic, or with the READS SQL DATA or NO SQL characteristic. If the variable is set to 1, MySQL does not enforce these restrictions on stored function creation. This variable also applies to trigger creation. See Section 17.6, “Binary Logging of Stored Programs”.
This variable was added in MySQL 5.0.16.
set global log_bin_trust_function_creators = 1
这个 有问题,去掉此句试试
DELIMITER ;
Query OK, 0 rows affected (0.08 sec)mysql> DROP FUNCTION IF EXISTS FUN_GETCODENAME;
Query OK, 0 rows affected, 1 warning (0.14 sec)mysql> DELIMITER $$
mysql> CREATE FUNCTION FUN_GETCODENAME(
-> STRCODETYPE CHAR(3)
-> , STRCODEID VARCHAR(10)
-> )
->
-> RETURNS VARCHAR(50)
-> BEGIN
-> DECLARE str varchar(50) default '';
-> SELECT CODE_NAME INTO @STR FROM S_CODE WHERE TYPE_ID = @STRCODETYPE A
ND CODE_ID = @STRCODEID;
-> RETURN str;
-> END $$
Query OK, 0 rows affected (0.05 sec)mysql> DELIMITER ;
mysql>
可能是版本问题
改成
DROP FUNCTION FUN_GETCODENAME;
可以创建了
RETURN @str
or
SELECT CODE_NAME INTO STR FROM S_CODE WHERE TYPE_ID = @STRCODETYPE A
SELECT CODE_NAME FROM S_CODE WHERE TYPE_ID = @STRCODETYPE AND CODE_ID = @STRCODEID;
是否 有返回值,不用变量,直接
TYPE_ID = 123 AND CODE_ID = 456;
直接操作有我怀疑我变量使用有问题
set global log_bin_trust_function_creators = 1; -- 这句干嘛用的,我也不知道?加上总不会有问题
DROP FUNCTION FUN_GETCODENAME; -- 删掉已经存在的
DELIMITER $$ -- 定义分隔符,必须要有,可以不是$$
CREATE FUNCTION FUN_GETCODENAME(
STRCODETYPE CHAR(3)
, STRCODEID VARCHAR(10)
) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型RETURNS VARCHAR(50) -- 指定返回值类型,如果你不确定返回文本长度,可以使用textBEGIN
DECLARE str varchar(50) default ''; -- 定义一个变量,可以指定默认值
SELECT CODE_NAME INTO @STR FROM S_CODE WHERE TYPE_ID = @STRCODETYPE AND CODE_ID = @STRCODEID; -- 设置改边变量的值
RETURN @str; -- 返回值
END $$ -- 注意看清楚了,这个end后面有你在前面定义的分割符号DELIMITER $$ -- 好,这里结束。***************************************************
看红色部分,这个str到底应该怎么定义使用?
DROP FUNCTION IF EXISTS FUN_GETCODENAME; -- 删掉已经存在的
DELIMITER $$ -- 定义分隔符,必须要有,可以不是$$
CREATE FUNCTION FUN_GETCODENAME(
STRCODETYPE CHAR(3)
, STRCODEID VARCHAR(10)
) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型RETURNS VARCHAR(50) -- 指定返回值类型,如果你不确定返回文本长度,可以使用textBEGIN
DECLARE str varchar(50) default ''; -- 定义一个变量,可以指定默认值
SELECT CODE_NAME INTO STR FROM S_CODE WHERE TYPE_ID = STRCODETYPE AND CODE_ID = STRCODEID; -- 设置改边变量的值
RETURN str; -- 返回值
END $$ -- 注意看清楚了,这个end后面有你在前面定义的分割符号DELIMITER $$ -- 好,这里结束。
DROP FUNCTION IF EXISTS FUN_GETCODENAME; -- 删掉已经存在的
DELIMITER $$ -- 定义分隔符,必须要有,可以不是$$
CREATE FUNCTION FUN_GETCODENAME(
STRCODETYPE CHAR(3)
, STRCODEID VARCHAR(10)
) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型RETURNS VARCHAR(50) -- 指定返回值类型,如果你不确定返回文本长度,可以使用textBEGIN
DECLARE str varchar(50) default ''; -- 定义一个变量,可以指定默认值
SELECT CODE_NAME INTO STR FROM S_CODE WHERE TYPE_ID = STRCODETYPE AND CODE_ID = STRCODEID; -- 设置改边变量的值
RETURN str; -- 返回值
END $$ -- 注意看清楚了,这个end后面有你在前面定义的分割符号DELIMITER $$ -- 好,这里结束。
在UDF中有参数什么意思?
是指这个
(
STRCODETYPE CHAR(3)
, STRCODEID VARCHAR(10)
)
STRCODETYPE CHAR(3)
, STRCODEID VARCHAR(10)
)
***********************
这里加@怎么不让加?
(
@STRCODETYPE CHAR(3)
, @STRCODEID VARCHAR(10)
)不通过不会又是版本问题吧
对,调用时
select udf('123','456')
@X在MYSQL中是 SESSION的变量,这个与SQL SERVER中并不同。 所以在FUNCTION的参数,显然它不能是SESSION变量。