- 浏览: 78778 次
文章分类
今天编写往数据库中插入200万数据的存储过程,遇到to_char的问题,记录下来与大家分享。
主键id为32位varchar类型,由数字组成,高位用0补足,例如'00000000000000000000000000000001'。
存储过程如下:
create or replace procedure insertintouserstmp20151104(numb in number) as
user_id varchar2(32);
i number := 1;
begin
for i in 1..numb loop
user_id := to_char(UCMP_INSERTUSER.Nextval,'00000000000000000000000000000000');--UCMP_INSERTUSER为自增序列
insert into users_tmp20151104(user_id,password,status,type_code,cust_type,register_source,create_tm,mem_no,nick_name,account_status)
values(user_id,'af8f9dffa5d420fbc249141645b962ee','Y','0','0','1',sysdate,user_id,user_id,'1');
if(mod(i,1000)=0) then
commit;
end if;
end loop;
commit;
end insertintouserstmp20151104;
调用存储过程时提示user_id长度为32位,实际为33位,测试发现是to_char指定了转换格式参数后,长度比预想的32位多了一位
select length(to_char(11)) from dual;--2
select length(to_char(11,'00')) from dual;--3
网上查询资料发现,to_char转换指定格式时,字符串前面增加了一个空格,所以长度比指定格式长度增加了1,网上流传原因是:那个空格位置是放符号的,正的数字就空了,负的就是一个‘-’号而没有空格。
select length(to_char(1,'00')) from dual;-- 3
select length(to_char(-1,'00')) from dual;-- 3
解决方法:用trim转换或者fm
select length(trim(to_char(1,'00'))) from dual;-- 2
select length(to_char(1,'fm00')) from dual;-- 2
再执行存储过程,运行成功,ok!
主键id为32位varchar类型,由数字组成,高位用0补足,例如'00000000000000000000000000000001'。
存储过程如下:
create or replace procedure insertintouserstmp20151104(numb in number) as
user_id varchar2(32);
i number := 1;
begin
for i in 1..numb loop
user_id := to_char(UCMP_INSERTUSER.Nextval,'00000000000000000000000000000000');--UCMP_INSERTUSER为自增序列
insert into users_tmp20151104(user_id,password,status,type_code,cust_type,register_source,create_tm,mem_no,nick_name,account_status)
values(user_id,'af8f9dffa5d420fbc249141645b962ee','Y','0','0','1',sysdate,user_id,user_id,'1');
if(mod(i,1000)=0) then
commit;
end if;
end loop;
commit;
end insertintouserstmp20151104;
调用存储过程时提示user_id长度为32位,实际为33位,测试发现是to_char指定了转换格式参数后,长度比预想的32位多了一位
select length(to_char(11)) from dual;--2
select length(to_char(11,'00')) from dual;--3
网上查询资料发现,to_char转换指定格式时,字符串前面增加了一个空格,所以长度比指定格式长度增加了1,网上流传原因是:那个空格位置是放符号的,正的数字就空了,负的就是一个‘-’号而没有空格。
select length(to_char(1,'00')) from dual;-- 3
select length(to_char(-1,'00')) from dual;-- 3
解决方法:用trim转换或者fm
select length(trim(to_char(1,'00'))) from dual;-- 2
select length(to_char(1,'fm00')) from dual;-- 2
再执行存储过程,运行成功,ok!
发表评论
-
oracle之分析函数
2020-03-11 14:07 0row_number() over(partition by ... -
oracle之日期函数
2016-12-20 10:55 9591、sysdate:返回当前日期 2、add_months(d ... -
oracle之数据字典
2016-07-18 18:55 0Oracle字典视图包括 ... -
oracle之回滚和undo表空间
2016-07-12 16:19 0Oracle undo表空间爆满的解决 1. 启 ... -
oracle之dblink
2016-07-12 14:34 0有时候需要从另一 ... -
oracle之监听配置文件
2016-07-11 13:57 0listener.ora文件为配置在oracle服务器 ... -
oracle之异常学习
2016-07-05 18:22 859ORACLE异常包括预定义异常,非预定义异常,自定义异常。 1 ... -
oracle的regexp_like函数使用正则表达式
2016-07-08 10:17 9095一、正则表达式入门 1. ... -
oracle中on、where、having的区别
2016-05-27 11:49 0http://www.cnblogs.com/java-cla ... -
面试准备
2016-05-14 22:57 0web安全测试: http://blog.sina.com.c ... -
常用sql
2016-04-28 15:52 01、删除表中重复数据 方式一:rowid select * f ... -
oracle之高水位线
2016-03-24 18:25 0insert /*+append*/ into table1 ... -
oracle11g自动分区
2016-03-23 21:07 948最近工作中需要给数据库创建分区,简单学习了一下,做下笔 ... -
oracle中rowid与rownum学习
2016-03-21 16:00 0rowid与rownum 都被称为伪列,但它们的存在方 ... -
SST
2016-01-21 16:57 0会员系统通过MQ获取CDH月结账号数据代码 1、插入 插 ... -
oracle排查异常sql的一些方法
2015-11-19 15:27 1016转自http://blog.itpub.net/2315585 ... -
oracle导入导出
2015-11-13 18:37 0Oracle数据导入导出imp/exp就相当于oracle数据 ... -
oracle索引学习
2015-11-12 16:45 0一、索引基础 1、索引 ... -
好的网站
2015-09-11 13:54 0plsql开发笔记和小结 http://www.blogjav ... -
merge用法总结
2015-08-04 19:32 01、merge语法 merge [hit] into [ ...
相关推荐
在 Oracle 中,还有其他日期函数,如 to_char 函数,可以将 DATE 类型的日期转换为字符串。例如: select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 在上面的例子中,sysdate 是当前日期和...
Oracle的`TO_CHAR`函数是一个非常重要的转换函数,它用于将数据库中的数值或日期类型数据转换为字符串形式,便于在报告、输出或者处理时按照指定的格式显示。在这个过程中,`TO_CHAR`函数的参数是关键,它们决定了...
Oracle的`to_char`函数是数据库中非常重要的一个转换函数,它允许我们将数值或日期类型的数据转换成格式化的字符串。这个函数在数据处理、报告生成和界面展示等场景中经常被用到,因为它能让我们根据需求自定义数字...
Oracle的`to_char`函数是一个强大的格式化工具,它允许用户将数据库中的日期、数值、时间等数据类型转换为格式化的字符串。这个函数在PL/SQL编程中非常常见,可以帮助开发人员按照特定的样式和格式展示数据,提高...
Oracle的`to_char`函数是数据库中非常重要的一个转换函数,它主要负责将数值或日期类型的数据转换为字符串格式,以便于数据展示、格式化输出或者进行特定的字符串操作。在Oracle数据库中,`to_char`函数的语法结构...
TO_CHAR 函数用于将日期或数值转换为字符。 - **语法**: ```sql TO_CHAR(date_or_numeric_expr, format_mask) ``` - **示例**: ```sql TO_CHAR(r.f_month, '09') ``` 此处将`f_month`字段中的月份转换为两...
通过上述示例可以看出,Oracle中的单值函数非常实用,可以帮助我们高效地处理各种数据问题。掌握这些函数对于提高SQL查询能力和优化数据库性能具有重要意义。在未来的学习过程中,建议深入研究更多复杂的函数组合和...
"解决mybatis使用char类型字段查询oracle数据库时结果返回null问题" 在使用mybatis框架对Oracle数据库进行查询操作时,如果使用char类型字段作为查询条件,可能会出现结果返回null的问题。这种情况下,需要对char...
在Oracle数据库中,处理正数转换为字符串时可能出现的前导空格问题可以通过两种方式进行解决:一是使用`FM`格式元素直接在`TO_CHAR()`函数中避免添加前导空格;二是使用`LTRIM()`函数去除已存在的前导空格。这两种...
Oracle中的日期格式处理主要通过使用TO_CHAR函数和TO_DATE函数来实现。 TO_CHAR函数可以将日期对象转换为指定的日期字符串格式。例如,下面的SQL语句将当前日期转换为"yyyy-mm-dd"格式的字符串: ```sql SELECT TO...
在Oracle数据库系统中,`TO_CHAR`函数被广泛用于将数值型数据转换为字符型数据,以便进行格式化输出或者满足特定的显示需求。本单元主要讲解`TO_CHAR`函数在处理数值型数据时的用法和格式化选项。 `TO_CHAR`函数的...
- **二进制转十六进制**: Oracle中的`RAW_TO_HEX`函数与SQL Server中的`CONVERT`函数有类似功能。 总结来说,尽管Oracle和SQL Server在函数的具体实现和语法上有所不同,但它们都提供了广泛的功能来支持日常的...
4. TO_CHAR函数:与TO_DATE相反,TO_CHAR将日期或数值转换为字符串,其语法为TO_CHAR(日期/数值, 格式模式)。日期格式模式包括元素如'YYYY'表示四位年份,'MM'表示月份,'DD'表示日期,还可以使用AM/PM标志,世纪值...
为了解决这个问题,我们可以利用Oracle数据库提供的`TO_CHAR`函数进行数据转换和格式化。`TO_CHAR`函数能够将数值转换为字符串,并允许我们自定义输出格式。在描述中提到的解决方案是: ```sql SELECT TO_CHAR(0....
11. 转换日期为字符串或者字符串为日期,使用 TO_CHAR 和 TO_DATE 函数 二、数值函数 1. 四舍五入函数 ROUND,用于对数值进行四舍五入操作 2. 求最大或最小值 MAX 和 MIN 3. 求平均值 AVG 4. 求和 SUM 三、日期和...
本文将详细介绍Oracle中与时间相关的应用及函数,包括转换函数(`TO_DATE` 和 `TO_CHAR`)、日期格式、日期运算等内容。 #### 一、转换函数 在Oracle中,`TO_DATE` 和 `TO_CHAR` 是最常用的时间转换函数。 ##### ...
15. TO_CHAR 函数:将数字转换为格式化的字符串,如TO_CHAR(9999.99) 可以控制小数点后的位数和千分位分隔符等。 这些函数在处理Oracle数据库中的数据时非常实用,无论是数据清洗、数据分析还是报告生成,都能大大...