精华内容
下载资源
问答
  • ORACLE 修改时间精度

    2019-07-05 09:22:07
    1、若要修改的字段为空,则可直接修改 2、若要修改的字段不为空则需要一个中介字段来转换,具体操作如下: 方法一、手动添加一个TEST_TIME字段,把要修改的字段转移过来,改一下名称就OK了 方法二、利用存储过程...

    1、若要修改的字段为空,则可直接修改

    2、若要修改的字段不为空则需要一个中介字段来转换,具体操作如下:

    方法一、手动添加一个TEST_TIME字段,把要修改的字段转移过来,改一下名称就OK了

    方法二、利用存储过程:

    1)先执行以下sql生产函数--------------------
    CREATE OR REPLACE
    PROCEDURE UPDATE_TIME_TO_THREE( pram1 in varchar2,pram2 in varchar2) 
    IS
    tableName  varchar2(100) := pram1;
    field  varchar2(100) := pram2;
    name varchar2(100) :='更新时间';
    -- 时间精度,根据需求自定义
    format varchar2(100) :='SYYYY-MM-DD HH24:MI:SS:FF3';
    BEGIN
    execute immediate 'ALTER TABLE '||tableName||' ADD (TEST_DATA TIMESTAMP(3))';

    execute immediate 'UPDATE '||tableName||' SET TEST_DATA = TO_TIMESTAMP ( to_char ( '|| field ||', '''|| format ||''' ), '''|| format ||''' )';

    execute immediate 'ALTER TABLE '||tableName||' DROP ('|| field ||')';

    execute immediate 'ALTER TABLE '||tableName||' MODIFY (TEST_DATA NOT NULL )';

    execute immediate 'ALTER TABLE '||tableName||' RENAME COLUMN TEST_DATA TO '|| field;

    execute immediate 'COMMENT ON COLUMN '||tableName||'.'||field||' IS '''||name||'''';

    END UPDATE_TIME_TO_THREE;

    ---------------------------------------------------------------------------------------------------------

     

    1)执行以下sql 修改时间精度:第一个参数,是要修改的表名,第二个参数是要修改的字段------------
        BEGIN
            UPDATE_TIME_TO_THREE ('HJ_MENU','UPDATE_TIME');
        END;

    ------------------------------------------------------------------------------------------------------------

    展开全文
  • oracle修改字段精度

    万次阅读 热门讨论 2016-07-31 15:42:51
    我们在设计数据库时难免会因为最初的需求导致数据库字段的设置不能满足实际的需求,如果我们是在新建之初表内无数据时我们可以直接重新建,但是如果有数据时就难免会遇到一些其他问题,例如我们修改数值型的精度时,...

    我们在设计数据库时难免会因为最初的需求导致数据库字段的设置不能满足实际的需求,如果我们是在新建之初表内无数据时我们可以直接重新建,但是如果有数据时就难免会遇到一些其他问题,例如我们修改数值型的精度时,如果我们是想将精度调小,可以直接实现,如果把精度调大会弹出请清空字段内容后重试的提示。

    有一个表名为tb,字段段名为name,数据类型nchar(20)。


    1、假设字段数据为空,则不管改为什么字段类型,可以直接执行:
    alter table tb modify (name nvarchar2(20));

    2、假设字段有数据,则改为nvarchar2(20)可以直接执行:
    alter table tb modify (name nvarchar2(20));

    3、假设字段有数据,则改为varchar2(40)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题

    /*修改原字段名name为name_tmp*/
    alter table tb rename column name to name_tmp;

    /*增加一个和原字段名同名的字段name*/
    alter table tb add name varchar2(40);

    /*将原字段name_tmp数据更新到增加的字段name*/
    update tb set name=trim(name_tmp);

    /*更新完,删除原字段name_tmp*/
    alter table tb drop column name_tmp;

    总结:
    1、当字段没有数据或者要修改的新类型和原类型兼容时,可以直接modify修改。
    2、当字段有数据并用要修改的新类型和原类型不兼容时,要间接新建字段来转移。
    展开全文
  • oracle修改精度

    2011-03-24 20:38:20
    oracle的 表a中有一个字段是number(6,2)类型的 表a中有数据,且 不能丢失的 ...1.重建该表,首先修改表名a为a_old,然后建新表a,创建时那个字段的精度当然用新的精度,然后用insert into a selec...
    oracle的 表a中有一个字段是number(6,2)类型的
    
    表a中有数据,且 不能丢失的
    现在我想修改这个字段的精度即变成number(6,3)
    实际操作时报错:“ORA01440:要减小标度或精度,则要修改的列必须为空(empty)”?

    >>
    1.重建该表,首先修改表名a为a_old,然后建新表a,创建时那个字段的精度当然用新的精度,然后用insert into a select * from a_old;的方式拷贝数据,当然建a表时,索引、约束、触发器等等不能漏了建,这样的好处是列的顺序不会改变,但如果原表和别的表存在关联或原表很庞大的话,可能不是很恰当。
    2.修改原表a,加一个新的列,精度是(6,3),然后拷贝数据给新的列,再删掉旧的列,改新的列的名称,这样做比较好,就是会改变表内列的顺序。
    展开全文
  • (2)Number(p, s) , 声明一个定点数 时, p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38;Number(p)声明一个整数相当于Number(p, 0);Number 声明一个浮点数,其精度为38,要注意的是...

    今天,在建表后插入语句时,报了这样的错误,对于这样的错误,搜集了一些资料,进行了总结如下: 建表语句:

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create table pre_info(
    pre_code varchar2(20) not null ,
    pre_name varchar2(20),
    pre_num number(5),
    pre_price_old number(5),pre_tax decimal (1,3),pre_price_net number(5,2),
    pre_dep varchar2(20),pre_starttime_plan date ,pre_overtime_plan date ,
    pre_starttime_actu date ,pre_overtime_actu date ,pre_overtime_cust varchar2(20),
    pre_overtime_blo varchar2(1),pre_month varchar2(2), primary key (pre_code)
    );
     
    1
    insert into pre_info values ( '2204' , '葡萄' ,100,280,1.32,180, '贸易' , '2017/11/28' , '2017/11/29' , '2017/11/29' , '2017/11/30' , '038765' , '0' , '11' );

    插入时报了如下错误:

    这里写图片描述

    改错后,小小总结如下:

    (1) 在DECIMAL(a,b)的设置中,整数的位数不能大于(a-b),但小数位可以大于b,但会从大于b的有效位开始截断。

    (2)Number(p, s) , 声明一个定点数 时, p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38;Number(p)声明一个整数相当于Number(p, 0);Number 声明一个浮点数,其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。定点数的精度(p)和刻度(s)遵循以下规则:

    1. 当一个数的整数部分的长度 > p-s 时,Oracle就会报错

    2.当一个数的小数部分的长度 > s 时,Oracle就会舍入。

    3. 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。

    4 .当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入

    总之,还有一些细节的东西需要注意,需要多总结。

     

    转载于:https://www.cnblogs.com/UUUz/p/9342731.html

    展开全文
  • ORACLE 修改NUMBER字段精度

    千次阅读 2017-06-23 10:33:00
    有数据后不能更改 1.增加一个字段来保存数据 altertabletable_nameadd(col1number(14,2)) updatetable_namesetcol1=round(col,2) 2.altertabletable_namedropcolumncol 3.altertabletable_nameadd(colnumb...
  • 首先,新增一个符合进度和长度符合要求的字段。...如果你要求不更改字段顺序的话,就要将原始字段清空,再执行更改字段精度和长度的sql,因为要修改字段的精度和长度必须是该字段的值都是空。  
  • oracle 修改number字段精度

    千次阅读 2009-12-16 10:48:00
    先新建一个字段,再update,删除
  • 一、如果表中没有数据可以直接修改: --声明变量存储要查询的表中的列是否存在 declare columnExistedCount number; begin --从系统表中查询表中的列是否存在 select count(1) into columnExistedCount from user_...
  • 修改Oracle表某字段精度

    千次阅读 2018-10-19 15:00:20
    由于修改字段精度会提示需要先清空该列的值,以下两种方法即为了解决此问题 方法一、 1.将原表的创建语句复制到一个文本中,将要改精度的字段修改,并保存 2.再将原表的表名和Keys关系修改 3.执行之前保存的...
  • 假设我们要修改order表中的total字段的精度 当字段可为空时 alter table order modify (total NUMBER(24,4) NOT NULL); 当字段可以有默认值时,即给了默认值不会影响业务 下面给出线上实际写法,假如该表有千万...
  • 已有数据修改 alter table T_CONTRACT add (PAY_MONEY_TEMP number(18,2)); update T_CONTRACT set PAY_MONEY_TEMP = round(PAY_MONEY,2); alter table T_CONTRACT drop column PAY_MONEY; alter table T_CONTRACT...
  • /*修改原字段名MONTHLY_INT_RATE为MONTHLY_INT_RATE_TMP*/ alter table RULE_PRODUCT_INFO rename column MONTHLY_INT_RATE to MONTHLY_INT_RATE_TMP;   /*增加一个和原字段名同名的字段MONTHLY_INT_RATE*/ ...
  • 关于oracle字段精度和javaType及jdbcType

    千次阅读 2017-11-11 13:09:43
    最近在做项目过程中,遇到...这时候就要修改字段精度了,因为表中有数据直接在原字段上添加精度不允许,因为表里的数据大多都是测试数据,所以我采用了以下方式来修改: /第一步清空表里的测试数据/ truncate table t
  • 修改字段精度。4.同步更新数据值。5.截断备份的临时表并删除 --1.create table BOSP_HTJS_MATERIAL_BAK as select * from BOSP_HTJS_MATERIAL_INFORMATION; select * from BOSP_HTJS_MATERIAL_BAK; --2....
  • 今天,同事问我一个问题,一个字段定义原先是NUMBER(15,2),并且... alter table B modify COL1 NUMBER(15,2) ORA-01440: 要减小精度或标度, 则要修改的列必须为空 SQL> 可以看出要使精度从大往小改ORACLE是不允许的
  • 一.修改某字段类型为clob类型。(增加clob临时字段->复制原字段值->删除原字段->修改临时字段名为原字段名)执行...oracle版本问题,即使没数据也会报错:ORA-22858:invalid alteration of datatype--第一步...
  • oracle修改字段类型,从number(2)改为number(2,1)今天下午,自己做东西时,发现个小问题,当时建立数据表的时候,把course的course_credit字段建为了number(2)型,这导致了输入类似于:4.5时,精度丢失,打算改表字...
  • oracle 修改表结构

    千次阅读 2018-11-29 17:30:03
    ALTER TABLE 语句用于在已有的表中添加、修改或删除列。 在表中添加列: ALTER TABLE table_name ADD column_name datatype 还可以设置默认值 例如: ALTER TABLE user_info add(log_time TIMESTAMP(6) default ...
  • Oracle数据库的表中有数据时,我们想要修改表的字段精度,可以按照如下步骤解决: 第一步:备份要修改的表数据 create table 备份表名_bak as select * from 原表名; 其实就是将要修改的表数据复制到新创建的...
  • Oracle修改时间方法

    千次阅读 2014-01-03 16:32:20
     --返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)  select to_char(current_timestamp(9),'MI:SSxFF') from dual;  6.计算程序运行的时间(ms)  declare  type rc is ref cursor;  l_rc rc;  l_dummy ...
  • 一开始建表时候没注意精度问题,后来需求中要求保留三位小数(之前两位),在有数据情况下不能直接使用alter 解决思路:先在该表中新增一个临时字段,将之前是需要修改的字段的值赋给临时字段,然后删除需要修改的字段...
  • 在工作中,有遇到金额的字段没有设置小数位(精度)的情况,致使金额保存的时候自动四舍五入,明明是100.5元,最后保存在表中却变成101(当初也不知道...ORA-01440: 要减小精度或标度, 则要修改的列必须为空 01440. 0

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,493
精华内容 6,597
关键字:

oracle修改精度