oracle中float 在sqlserver中对应哪个 类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中float 在sqlserver中对应哪个 类型相关的知识,希望对你有一定的参考价值。

Oracle SQLServer    比较

SQLServer 常见的数据库类型

字符数据类型   CHAR   CHAR :都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb 
变长字符数据类型   VARCHAR2   VARCHAR   :racle里面最大长度为4kb,SQLServer里面最大长度为8kb 
根据字符集而定的固定长度字符串   NCHAR :NCHAR   前者最大长度2kb后者最大长度4kb 
根据字符集而定的可变长度字符串   NVARCHAR2   NVARCHAR   :者最大长度都为4kb 
日期和时间数据类型   DATE   有Datetime和Smalldatetime两种   在oracle里面格式为DMY在SQLSerser里面可以调节,默认的为MDY 
数字类型   NUMBER(P,S)   NUMERIC[P(,S)] :Oracle里面p代表小数点左面的位数,s代表小数点右面的位数。而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。 
数字类型   DECIMAL(P,S)   DECIMAL[P(,S)]   :racle里面p代表小数点左面的位数,s代表小数点右面的位数。而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。  
整数类型   INTEGER   INT   同为整数类型,存储大小都为4个字节 
浮点数类型   FLOAT   FLOAT 
实数类型   REAL   REAL


ORACLE的数据类型 
常用的数据库字段类型如下:

字段类型           中文说明          限制条件         其它说明 
CHAR         固定长度字符串    最大长度2000 bytes 
VARCHAR2    可变长度的字符串   最大长度4000 bytes    可做索引的最大长度749 
NCHAR      根据字符集而定的固定长度字符串 最大长度2000 bytes 
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes 
DATE        日期(日-月-年)   DD-MM-YY(HH-MI-SS) 
LONG        可变长度的字符数据 最大长度2G(231-1)足够存储大部头著作 
RAW      固定长度二进制数据   最大长度2000 bytes 可存放比较小的多媒体图象声音等 
LONG RAW 可变长度的二进制数据 最大长度2G 可存放比较大的多媒体图象声音等 
BLOB     大型的二进制对象(可变长度)最大长度4G 
CLOB     大型的CHAR类型数据 
NCLOB    大型的NCHAR类型数据 
BFILE    存放在数据库外的大型的二进制文件 
ROWID   数据表中记录的唯一行号10 bytes ********.****.****格式,*为0或1,存储在索引中。 
UROWID 同上 存储在索引中 
NROWID   二进制数据表中记录的唯一行号 最大长度4000 bytes 
NUMBER(P,S) 数字类型   P为总的位数,S为小数位 
DECIMAL(P,S) 数字类型P为总的位数,S为小数位 
INTEGER      整数类型 的整数 
FLOAT        浮点数类型 
NUMBER(38),双精度 
REAL   实数类型 
NUMBER(63),精度更高

注意:每个表中只能有一个LONG或LONG RAW列,……….。

几个常见的SQLSERVER和ORACLE数据类型对应关系表格

SQL Server和Oracle数据类型的对应关系



参考技术A decimal(18,5)

在存储过程中对 Oracle 表进行排序

【中文标题】在存储过程中对 Oracle 表进行排序【英文标题】:Sorting an Oracle table inside a stored procedure 【发布时间】:2013-08-12 20:20:16 【问题描述】:

我有一个从 .sql 文件运行的存储过程,该文件接受用户的输入并运行该过程。该过程运行许多查询并将一行值插入到表中。在 .sql 文件中,我想在完成运行查询后按某个列对表进行排序。目前我有:

DECLARE
 NAMEPARAM VARCHAR2(200);
 VERSIONPARAM VARCHAR2(200);
 STARTDATE DATE;
 ENDDATE DATE;

BEGIN
 NAMEPARAM := '&1';
 VERSIONPARAM := '&2';
 STARTDATE := '&3';
 ENDDATE := '&4';

 PROCEDURE(NAMEPARAM, VERSIONPARAM, STARTDATE, ENDDATE);
 COMMIT;

 Select * from TABLE_NAME
 ORDER BY COLUMN_NAME ASC;

 EXCEPTION
 WHEN OTHERS THEN
 RAISE_APPLICATION_ERROR(-20101,SQLERRM);
 END;
 /

但是它会抛出错误:

PLS-00428:此 SELECT 语句中应有一个 INTO 子句

我不知道为什么它需要一个 into 子句。帮忙?

编辑: 澄清一下,我不想看到已排序表的输出,我希望表本身能够更新并按列按升序排序。

【问题讨论】:

“排序 Oracle 表”是什么意思?表是无序的行集。他们没有订单。查询结果可以排序,由order by子句决定。 @javakid1993,我怀疑您在误解 Oracle 表中的行具有内在顺序。哪有这回事。行仅在查询时排序。 好吧,我的意思是即使在插入要按顺序插入的行时也要有一个子句。但我理解我来自哪里的错误。谢谢。 【参考方案1】:

如果您将SELECT 语句放在 PL/SQL 块中,则需要对结果进行一些处理。如果您期望恰好是一行,则可以使用 SELECT INTO 局部变量。假设您需要多行,您可以编写一个循环遍历行的FOR 循环,或者您可以将行BULK COLLECT 放入一个PL/SQL 集合中。您也可以打开一个SYS_REFCURSOR,但由于无法从匿名 PL/SQL 块返回它,这似乎不太可能是您想要的。

我的猜测是您希望SELECT 语句位于 PL/SQL 块之外,并且您希望使用任何工具来执行 .sql 脚本来运行 PL/SQL 块以填充表然后运行SELECT 语句,将结果写入您正在假脱机输出的任何文件/控制台。

【讨论】:

我不希望它输出到我希望表格本身按该列更新和排序的任何地方。我什至都不想看到输出。 @javakid1993,你读过其他的 cmets 吗?通常,数据库文件中的表行没有“排序”。可以对查询的结果进行排序。有索引组织表,与标准的堆管理表不同,但我怀疑这就是您要问的。 正如 Gordon 和 OldProgrammer 所指出的 - 为什么要对表格进行“排序”而不想要任何排序的输出?如果您能清楚地考虑最终结果并制定解决方案,这将有所帮助。

以上是关于oracle中float 在sqlserver中对应哪个 类型的主要内容,如果未能解决你的问题,请参考以下文章

怎么将sql2005中的数据导入到oracle中,求具体步骤补助方法

sqlsever中对用户授权时显示无法授权

sqlserver中float转varchar时不显示科学计数法

sqlserver中的小数类型(float和decimal)

在 oracle 中对具有空值的列求和

如何在 CUDA 中对浮点值使用 atomicMax?