create  function   getRanWords()   returns  char(100)
      begin
     DECLARE  m   int;
     DECLARE  n   int;
     DECLARE  i   int;
     DECLARE  out_name char(100);
           while i<11 do
                  set m := mod(abs(rand()),39 )+16;
                  set n := mod(abs(rand()),94 )+1;
                  set out_name:=out_name||chr((m+160)*16*16+n+160);
                  set i:=i+1;
          end  while;
          returns  out_name;
    end
我编写了一个这样的函数,如果去掉
                     set m := mod(abs(rand()),39 )+16;
                  set n := mod(abs(rand()),94 )+1;
                  set out_name:=out_name||chr((m+160)*16*16+n+160);
set 会出错。还有returns out_name;这句也会报错!
大家请帮帮忙,看看是什么问题呢!

解决方案 »

  1.   

    我给你改了一下delimiter ||
    drop function getRanWords||
    create  function  getRanWords()  
    returns  char(100)
    begin
        DECLARE  m  int default 0;
        DECLARE  n  int default 0;
        DECLARE  i  int default 0;
        DECLARE  out_name char(100) default '';
        while i <11 do
            set m = mod(abs(rand()*100*i),39 )+16;
            set n = mod(abs(rand()*1000*i),94 )+1;
            set out_name = concat(out_name, char((m+160)*16*16+n+160));
            set i = i+1;
        end while;
        return  out_name;
    end||
    delimiter ;
      

  2.   

    我在Navicat for MySQL 里运行不了哦!
    出现1305-FUNCTION test.getRanWords does not exist 错误
    我把drop function getRanWords||去掉后还是会出现错误哦
      

  3.   

    显示
    This function has none of DETERMINISTIC,NO SQL or READS SQL DATE in its declaration and binary is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
      

  4.   


    set global log_bin_trust_function_creators=on;
    然后再执行!
      

  5.   

    应该还是这里有问题:return  out_name;
      

  6.   

    出现 data to long for column 'out_name' at row 1
    错误
    请问又如何解决呢!!!