最近刚开始学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.不好意思,我就这点儿技术分了。麻烦大家了
我想写一个整理字符串的函数 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.不好意思,我就这点儿技术分了。麻烦大家了
解决方案 »
- 订单流水号=年月日+插入时记录的ID,如何实现?
- 是否需要设置访问同一表的串行级别
- 能向你请教关于mysql优化的问题吗·················
- 关于MySQL中的ODBC与C语言的API的一些问题
- Mysql SP中在捕获异常时能获取到详细的异常信息吗?
- 如何把mssql server 导入 mysql 数据库!
- 本地调试是http;//127.0.0.1:287,在网上为什么用我的ip代替127.0.0.1时看不到任何东西?
- mysql_query函数返回值怎么是1呢
- mysql查询卡主问题求助
- mysql 存储过程中使用临时表出现doesn exist 错误
- 请问大家有办法双系统linux下面的mysql同享win下面的mysql数据文件吗
- 求助,查询多表里查询相同字段的相同内容
2. MYSQL不支持 过程参数的默认值处理。 也就是说,你调用的时候必须添加所有的参数。
所有参数写上
MYSQL不支持A.name%rowtype.这种形式
我如何获取一个表中某列的类型呢?
在5.X以上,可以直接访问系统表
information_schema.COLUMNS,取DATATYPE
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 ????);我问号的位置要写成什么呢?
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;