如题:MYSQL自定义函数如何获取当前表名和字段名100分奉上

解决方案 »

  1.   

    比如我写了一个自定义函数,在调用的那个SQL语句中,获取SQL执行的表名(最简单的语句,只有一个表的SQL)比如系统自带的函数如MAX(),min(),COUNT()等等,在执行的时候并没有限制是指定的那个表
      

  2.   

    select myfunction(colName) from table1
    如果你的意思是想在 myfunction 中得到table1的表名,则没有办法。
      

  3.   


    这些系统函数根本不需要知道是哪些表。比如 select sum(col) from table1
    数据库会执行 select col from table1然后对每条符合条件的记录的COL列进行累加。 
      

  4.   

    你要达到什么目的,详细说明,那些系统函数是怎么做到的呢?
    应该是系统解析SQL语句并运行,不用人工干预
      

  5.   

    在你的函数的输入参数中加上表名myfunction(para1 int, para2 char(30), tablename varchar(30))
      

  6.   

    将表名传入UDF中?
    如是,要用字符串累加生成SQL语句,再动态执行的方法
    set @asql=concat('select * from ',tablename);
    prepare stml from @asql;
    execute stml;
      

  7.   


    CREATE FUNCTION GetTOID() RETURNS  BigInt Unsigned
    begin
        select  userID into @ID  FROM user1 where .......;
        RETURN @ID;
    end;------------
    这个函数只能得到 user1 表中的值,还有user2,user3,user4等等,要是每个表都写一个的话太不方便了,最好一个函数都能解决把表名传进去组装是个好办法,但是我不太会在函数里操作数据对象!
      

  8.   

    CREATE FUNCTION GetTOID(tablename varchar(30)) RETURNS  BigInt Unsigned
    begin
    set @asql=concat('select  userID into @ID FROM ',tablename,' where .......');
    prepare stml from @asql;
    execute stml;
         
        RETURN @ID;
    end;
      

  9.   


    那回答就很简单了。
    除非你直接去改MYSQL的源代码,否则无解。
      

  10.   


    呜呜,我那个SQL语句后面很长,还有括弧!执行错误(1336)Dynamic SQL is not allowed in stored function or trigger
      

  11.   

    http://blog.chinaunix.net/u3/116107/showart.php?id=2275582你看看这个文章。
    里面包含取出某个库的全部表,然后对这些表进行操作。你的问题貌似可以通过这个办法解决。
      

  12.   

    还没搞定呀??
    这样一步步来吧、
    1:把你的函数带个参数,名称就是表名称
    CREATE FUNCTION GetTOID(tablename varchar(30)) RETURNS  BigInt Unsigned
    begin
        select  userID into @ID  FROM user1 where .......;
        RETURN @ID;
    end;
    把这个函数调试成功,保证传进去的表名称能够起作用2:CREATE PROCEDURE Clear_DB( 
            DB_NAME varchar(50) # 数据库名称 
      )
    BEGIN
      DECLARE done INT DEFAULT 0; #游标的标志位
      DECLARE a varchar(20);
      DECLARE b varchar(20);
      DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME ;
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
     
      OPEN cur1;
      REPEAT
        FETCH cur1 INTO a;
        IF NOT done THEN 
           set b=concat('select GetTOID( ',a,')'); # 拼命令 
           SET @E=b; 
           PREPARE stmt1 FROM @E; 
              EXECUTE stmt1; # 执行命令 
              DEALLOCATE PREPARE stmt1; #释放对象 
        END IF;
      UNTIL done END REPEAT;
      CLOSE cur1;
    END;创建这个存储过程,对每个表都执行这个函数。