oracle 怎么把一个float型的字段修改成double型,必须要double型的,oracle是支持double型的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 怎么把一个float型的字段修改成double型,必须要double型的,oracle是支持double型的相关的知识,希望对你有一定的参考价值。

如果不能修改类型,怎么新增一个double型字段

数字类型的在oracle中其实可以用number型来取代,number类型含盖了所有的数字类型,包括整型,浮点型....
oracle中应该是没有double这种数据类型
新增一个字段:alter table tablename add 字段名 类型
望采纳!追问

oracle中有double型的,我其他表中有用到,只是其他表中的double型字段是我创建表时建表语中添加的,我不知道怎么样单独加一个double的列

追答

你能把你用到的那个double类型的表建表语句发一下吗,我测试了一下,oracle建表或者增加字段没办法识别double关键字

参考技术A

Oracle   数值数据类型:




基本类型为 NUMBER(P,S)

P范围1到38

S 范围 -84 到 127


Oracle NUMBER类型能以极大的精度存储数值,具体来讲,精度可达38位。

其底层数据格式类似一种“封包小数“表示。

Oracle NUMBER类型是一种变长格式,长度为0~22字节。

它可以存储小到10e-130、大到(但不包括)10e126的任何数值。这是目前最为常用的数值类型。





以下为与ANSI SQL兼容而使用:


FLOAT(b)浮点数  :映射至NUMBER类型。

REAL单精度浮点数  :映射至NUMBER类型。

DOUBLE PRECISION双精度浮点数  :映射至NUMBER类型。

NUMERIC(p,s):  完全映射至NUMBER(p,s)。如果p未指定,则默认为38.

DECIMAL(p,s)或DEC(p,s)小数 :完全映射至NUMBER(p,s)。如果p为指定,则默认为38.

INTEGER或INT 整数 :完全映射至NUMBER(38)类型。

SMALLINT 小整数:完全映射至NUMBER(38)类型。


SQL> CREATE TABLE TEST_DOUBLE(
  2   ID  INT,
  3   VAL DOUBLE PRECISION
  4  );
表已创建。
SQL>
SQL> INSERT INTO TEST_DOUBLE VALUES(1, 12345.6789);
已创建 1 行。
SQL>

参考技术B alter table table_name add column_name double;
为一个已存在的表增加字段。追问

这个语句是执行不了的

追答

alter table table_name add column_name numeric(20,10);
oracle是没有double型的,你可以用numeric(m,n)替代,m是数据长度,n是小数位数,整数位数就是m-n

追问

有double型的 我其他表中就有字段用的double型的

追答

http://www.cnblogs.com/yshb/archive/2012/06/19/2554279.html
你看看这个吧,oracle 的数据类型
没有double,只有BINARY_DOUBLE
你说的有字段用的double,这个double有可能是自己建的自定义类型

参考技术C alter table tablename modify colname double;

oracle update触发器如何获取被修改的字段

即使:new和:old值没有变化 比如:tab表中字段a=1,b=2,c=3,d=4,执行了SQL语句:update tab set a=1,c=3,怎么在该表的UPDATE触发器中知道修改了字段a和c的值?
业务逻辑:
只要更新了字段a一次,不管a更新前后值是否一致,都让d=d+1,比如依次执行以下语句:
update tab set a=2,c=33; --此时触发器中执行::new.d:=:old.d+1;
update tab set a=2; --触发器中执行::new.d:=:old.d+1;
update tab set c=333; --触发器不执行:new.d:=:old.d+1;
update tab set b=22,c=333; --触发器不执行::new.d:=:old.d+1;
update tab set a=1,b=222; --触发器执行::new.d:=:old.d+1;

多写几个if判断就可以实现。如

创建测试表及插入数据:

create table test
(id int,
name varchar2(10),
money int);


insert into test values (1,\'张三\',100);
insert into test values (2,\'李四\',29);
insert into test values (3,\'王五\',50);
insert into test values (4,\'赵六\',56);
commit;

创建触发器:

create or replace trigger t_test
 before update 
   on test
   for each row 
begin
  if updating (\'name\')
    then dbms_output.put_line(\'name字段被修改\');
  elsif updating (\'money\')
     then dbms_output.put_line(\'money字段被修改\');
  end if;
end;

执行update语句,进行测试:

update test set name=\'哈哈\' where id=1;
commit;

结果截图:

参考技术A 触发器中用:old变量取对应的字段值出来判断,:old.a,:old.c 参考技术B create or replace trigger aaa
after update on tab
for each row
for each row就会捕获到你任何update 不管相同与否
参考技术C 在update触发器中用of来实现 参考技术D 可以写啊,sample if(:new.a != :old.a) then dbms_output.put_line('a改变') end if;

if updating('a') then dbms_output.put_line('a改变') end if;
--试试第二个;本回答被提问者和网友采纳

以上是关于oracle 怎么把一个float型的字段修改成double型,必须要double型的,oracle是支持double型的的主要内容,如果未能解决你的问题,请参考以下文章

1、sql查询语句时怎么把几个字段拼接成一个字段?这几个字段是整型的。

1、sql查询语句时怎么把几个字段拼接成一个字段?这几个字段是整型的。

java里怎么算除法?

c语言里怎么把float转换为char型?

oracle float转化成double

在sql server2000中,如何把整型字段转换成字符串型字段?