最近刚开始学MySQL,遇到些问题,想请教大家,
我想写一个整理字符串的函数 wyy.RTRIM(STR VARCHAR(1024), SEPS VARCHAR(1024)),当SEPS默认为空时,我就删除字符串str右侧的制表符,换行符等特殊符号,而非空时,则删除str右侧的seps字符串。
可是在实际操作中发现,MySQL不能传递初始参数(或者是我理解错了?正确的传递默认参数的方法是什么呢?)于是改用函数重载,可是后来又发现他不支持函数重载。请问下,我该如何解决这个问题呢?
我针对与函数重载,写的脚本如下:
DELIMITER //
DROP FUNCTION IF EXISTS wyy.RTRIM//
  CREATE FUNCTION wyy.RTRIM(STR VARCHAR(1024))
    RETURNS VARCHAR(1024)
  RTRIM:BEGIN
     DECLARE i INT DEFAULT 1;
     WHILE i<5 DO
       SET STR:=TRIM(TRAILING CHR(9) FROM STR);
       SET STR:=TRIM(TRAILING CHR(10) FROM STR);
       SET STR:=TRIM(TRAILING CHR(13) FROM STR);
       SET STR:=TRIM(TRAILING CHR(32) FROM STR); 
       SET i=i+1; 
     END WHILE;        
     RETURN STR;
  END RTRIM;
  //  CREATE FUNCTION wyy.RTRIM(STR VARCHAR(1024), SEPS VARCHAR(1024))
    RETURNS VARCHAR(1024)
  RTRIM:BEGIN
    RETURN TRIM(TRAILING SEPS FROM STR);
  END RTRIM;
  //还有一个问题,我如何获取一个表中某列的类型呢?
使用情况是,我创建了表A,它又一列name,类型为varchar;我现在想创建表B,他也有一列name,然后我指定类型时,不想直接写varchar,而是想借助于表A中的列name的类型来表示,我该怎么写呢?oracle下是A.name%rowtype.不好意思,我就这点儿技术分了。麻烦大家了

解决方案 »

  1.   

    MYSQL目前版本尚不支持你提到的这些功能。1. MYSQL不支持 函数重载
    2. MYSQL不支持 过程参数的默认值处理。 也就是说,你调用的时候必须添加所有的参数。
      

  2.   

    正确的传递默认参数的方法是什么呢?
    所有参数写上
    MYSQL不支持A.name%rowtype.这种形式
    我如何获取一个表中某列的类型呢?
    在5.X以上,可以直接访问系统表
    information_schema.COLUMNS,取DATATYPE
      

  3.   

    那MySQL内部的函数,如locate(),他就有LOCATE(substr,str) , LOCATE(substr,str,pos)这两种形式,系统有是怎么实现的呢?
      

  4.   

    select DATATYPE from information_schema.COLUMNS where TABLE_NAME='tt'
      

  5.   

    我试验过了,语句如下:
     select DATA_TYPE from information_schema.COLUMNS where TABLE_NAME='aa' and  COLUMN_NAME='id'
    这样就可以得到表aa中列id的类型,问题是,如果在两个数据库中都有表aa且他们都有id列的话,那么就会输出两个结果
    mysql> select DATA_TYPE from information_schema.COLUMNS where TABLE_NAME='aa' and  COLUMN_NAME='id'//
    +-----------+
    | DATA_TYPE |
    +-----------+
    | int       | 
    | varchar   | 
    +-----------+
    我如何指定数据库呢,刚才尝试了TABLE_NAME='test.aa' ,不行。还有,即使我可以指定数据库,那么我回到我问题的出发点
    create table aa (id int);
    create table bb (id ????);我问号的位置要写成什么呢?
      

  6.   

    1、TABLE_SCHEMA='你的数据库名'
    2、
    select DATA_TYPE into @aa from information_schema.COLUMNS where TABLE_NAME='aa' and COLUMN_NAME='id' and TABLE_SCHEMA='你的数据库名';
    set @sql=concat('create table bb (id',@aa,')');
    prepare stml from @sql;
    execute stml;
      

  7.   

    不好意思,我刚才没细心看information_schema.COLUMNS的结构,忽视它中的列TABLE_SCHEMA,给你添麻烦了。还是就是我问号位置要那样写吗?好奇怪,先吃饭了,回来再交流,谢谢了。