create  function   SplitStr
  (
    F_SourceSql   varchar(8000),
    F_StrSeprate   varchar(100)
   )   
 RETURNS varchar(1000)
  BEGIN   
  
   DECLARE    F_ch     varchar(100)   ;
   drop TABLE IF EXISTS tmpList;
    CREATE TABLE tmpList (
   F1   varchar(100)
   );
  
   set   F_SourceSql=F_SourceSql+F_StrSeprate   ;  
   while  F_SourceSql!='' DO
   set  F_ch = left(F_SourceSql,LOCATE(',',F_SourceSql,1)-1) ;  
   insert   tmpList   values(F_ch)   ;
   set   F_SourceSql=stuff(F_SourceSql,1,LOCATE(',',F_SourceSql,1),'')   ;
            
   END WHILE ;
  end;以上是个函数脚本运行时“Explicit or implicit commit is not allowed in stored function or trigger.”   函数的功能是 将这样“1,2,3”字符串转换成一个表多列,以便做where 条件使用,希望高手解决下 谢谢了

解决方案 »

  1.   

    去掉
    DROP TABLE IF EXISTS tmpList;
         CREATE TABLE tmpList (
        F1   VARCHAR(100)
        );
    DELIMITER $$
    CREATE  FUNCTION   SplitStr
       (
         F_SourceSql   VARCHAR(8000),
         F_StrSeprate   VARCHAR(100)
        )   
      RETURNS VARCHAR(1000)
       BEGIN   
       
        DECLARE    F_ch     VARCHAR(100)   ;
            
        SET   F_SourceSql=F_SourceSql+F_StrSeprate   ;  
        WHILE  F_SourceSql!='' DO
        SET  F_ch = LEFT(F_SourceSql,LOCATE(',',F_SourceSql,1)-1) ;  
        INSERT   tmpList   VALUES(F_ch)   ;
        SET   F_SourceSql=stuff(F_SourceSql,1,LOCATE(',',F_SourceSql,1),'')   ;
                 
        END WHILE ;
        RETURN F_SourceSql;
       END$$
    DELIMITER ;直接用辅助表+SQL语句 拆分字符串
      

  2.   

    ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1, START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES. 这些是隐形提交语句
      

  3.   


    谢谢你的回复。
    现在我去掉那个建表的操作,
    这样 SplitStr1('aa,bb,cc',',');
    select * from tmpList
    提示:语法错误,哪里错了?
    我是刚从MSSQL 转来的 有什么的不懂的地方还请多多包涵
      

  4.   

    select SplitStr1('aa,bb,cc',',');没必要用UDF,直接用辅助表+SQL语句 拆分字符串
      

  5.   

    对,也可以将UDF->SP,在SP中处理,得到结果,再取得记录集
      

  6.   

    函数中不能使用隐含式的事务提交。 create table 属于这类。 所以函数中无法使用。
      

  7.   


    udf是什么啊,sp是什么啊