`

PL/SQL中的数据类型隐式转换规则

阅读更多
1) During INSERT and UPDATE operations, Oracle converts the value to the datatype of the affected column.
对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。如
假如id列的数据类型为number
update t set id='1'; -> 相当于 update t set id=to_number('1');
insert into t(id) values('1') -> insert into t values(to_number('1'));
--------------------------------------------------------------
2) During SELECT FROM operations, Oracle converts the data from the column to the type of the target variable.
对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。如
假设id列的数据类型为varchar2
select * from t where id=1; -> select * from t where to_number(id)=1;
但如果id列的数据类型为number,则
select * from t where id='1'; -> select * from t where id=to_number('1');(参考下文)
--------------------------------------------------------------
3) When comparing a character value with a NUMBER value, Oracle converts the character data to NUMBER.
当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。如
假设id列的数据类型为number
select * from t where id='1'; -> select * from t where id=to_number('1');
--------------------------------------------------------------
4) When comparing a character value with a DATE value, Oracle converts the character data to DATE.
当比较字符型和日期型的数据时,oracle会把字符型转换为日期型。如
假设create_date为字符型,
select * from t where create_date>sysdate; -> select * from t where to_date(create_date)>sysdate;(注意,此时session的nls_date_format需要与字符串格式相符)
假设create_date为date型,
select * from t where create_date>'2006-11-11 11:11:11'; -> select * from t where create_date>to_date('2006-11-11 11:11:11'); (注意,此时session的nls_date_format需要与字符串格式相符)
--------------------------------------------------------------
5) When you use a SQL function or operator with an argument of a datatype other than the one it accepts,
Oracle converts the argument to the accepted datatype.
如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一直,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型。如
假设过程如下定义
p(p_1 number)
exec p('1'); -> exec p(to_number('1'));
--------------------------------------------------------------
6) When making assignments, Oracle converts the value on the right side of the equal sign (=) to the datatype of the target of the assignment on the left side.
赋值时,oracle会把等号右边的数据类型转换为左边的数据类型。如
var a number
a:='1'; - > a:=to_number('1');
--------------------------------------------------------------
7) During concatenation operations, Oracle converts from noncharacter datatypes to CHAR or NCHAR.
用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型。
select 1||'2' from dual; -> select to_char(1)||'2' from dual;
--------------------------------------------------------------
8) During arithmetic operations on and comparisons between character and noncharacter datatypes,
Oracle converts from any character datatype to a number, date, or rowid, as appropriate.
In arithmetic operations between CHAR/VARCHAR2 and NCHAR/NVARCHAR2, Oracle converts to a number.
如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等。
如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之间作算术运算,则oracle会将她们都转换为number类型的数据再做比较。
--------------------------------------------------------------
9) Comparisons between CHAR/VARCHAR2 and NCHAR/NVARCHAR2 types may entail different character sets.
The default direction of conversion in such cases is from the database character set to the national character set.
比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。
--------------------------------------------------------------
简单总结:
比较时,一般是字符型转换为数值型,字符型转换为日期型
算术运算时,一般把字符型转换为数值型,字符型转换为日期型
连接时(||),一般是把数值型转换为字符型,日期型转换为字符型
赋值、调用函数时,以定义的变量类型为准。
分享到:
评论

相关推荐

    ORACLE PL/SQL从入门到精通

    此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型转换、程序设计指导原则、合并数据库中的数据行(MERGE)、约束、索引、子查询、分页技术等高级主题。 最后,还有关于字符串、数值、...

    精通pl/sql

    2. **PL/SQL数据类型**:详细讲解PL/SQL支持的数据类型,如数值型、字符型、日期时间型、布尔型、记录类型、游标类型等,以及如何进行数据转换和操作。 3. **PL/SQL控制结构**:深入探讨流程控制语句,如循环...

    oracle pl/sql最佳实践

    使用内置的验证函数,如`VALIDATE_CONVERSION`检查数据类型转换。 6. **事务管理**:明确定义事务边界,使用`COMMIT`和`ROLLBACK`确保数据一致性。理解并发控制,正确使用锁定机制,避免死锁。 7. **错误日志**:...

    PL/SQL编程

    INDEXBY TABLES是PL/SQL中的一种数组类型,它可以使用任何数据类型作为索引。 #### 2.4.7 数据类型的转换 在PL/SQL中,有时需要对不同类型的变量进行赋值或操作,这就需要进行类型转换。例如,可以使用TO_CHAR、TO...

    绝对好的 oracle pl/sql 编程

    PL/SQL 支持多种数据类型之间的转换,例如 TO_CHAR 和 TO_NUMBER 函数。 **2.5 运算符和表达式** - **2.5.1 关系运算符**: 如 =、、<、>。 - **2.5.2 一般运算符**: 如 +、-、*、/。 - **2.5.3 逻辑运算符**: 如 ...

    PL/SQL Developer8.04官网程序_keygen_汉化

    变量声明与赋值 PL/SQL主要用于数据库编程,所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。这里简单介绍两种常用数据类型:number、varchar2。  number ...

    PL/SQL学习文件

    - **PL/SQL**是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据操纵能力与传统编程语言的流程控制功能,使得开发者能够在数据库环境中编写更为复杂的应用逻辑。 #### 二、PL/SQL与SQL的区别 - **SQL**...

    13oracle的PL/SQL编程-定义并使用变量 PPT

    在PL/SQL中,变量必须先声明其类型,这可以是Oracle数据库支持的数据类型,如NUMBER、VARCHAR2、DATE等,也可以是用户自定义的数据类型。例如: ```sql DECLARE num_var NUMBER; -- 数字变量 str_var VARCHAR2(20)...

    Oracle 8i PL_SQL高级程序设计

    2. **数据类型**:PL/SQL支持多种数据类型,如数值型(NUMBER)、字符型(VARCHAR2, CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合数据类型,如记录(RECORD)和数组(PL/SQL TABLE)。 3. **控制流语句**:...

    PL/SQL的培训教程

    - **数据结构**是组织和存储数据的方式,如数组、链表、堆栈、队列等,在PL/SQL中可以使用集合(collections)来存储一组相关数据。 通过上述知识点的学习,参与者将能够理解和应用SQL与PL/SQL的基本概念和技术,...

    PL_SQL_

    ### PL/SQL数据类型 预定义数据类型包括数字型、字符型、本地字符型、LOB类型、布尔类型、Datetime和Interval类型等,同时支持用户自定义子类型和数据类型转换。 ### PL/SQL的控制结构 涵盖条件控制(IF和CASE语句...

    PL/SQL 程序设计

    - **数据类型的转换**:可以通过CAST函数实现不同数据类型之间的转换。 **2.4 运算符和表达式** - **关系运算符**:如=、、<、>等。 - **一般运算符**:+、-、*、/等。 - **逻辑运算符**:AND、OR、NOT等。 **2.5...

    PL/SQL 基础.doc

    PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和...

    PLSQL程序设计.pdf (清晰版)

    - **2.4.7 数据类型的转换**:PL/SQL提供多种方法来转换不同数据类型。 **2.5 运算符和表达式** - **2.5.1 关系运算符**:如`=`, `<>`, `, `>`, `, `>=`等。 - **2.5.2 一般运算符**:如加、减、乘、除等。 - **...

    PL-SQL用户指南与参考(译)

    #### 第三章:PL/SQL数据类型 ##### 一、预定义数据类型 **1、数字型** 包括整数、浮点数等多种数值类型,用于存储数值数据。 **2、字符型** 包括固定长度的`CHAR`和变长的`VARCHAR2`,用于存储文本数据。 **3...

    PL_SQL用户指南与参考.doc

    #### 第三章 PL/SQL数据类型 **一、预定义数据类型** **1、数字型** 包括整数、实数、浮点数等,用于存储数值数据。 **2、字符型** 用于存储文本数据,包括VARCHAR2、CHAR等类型。 **3、本地字符型** 本地字符型...

    Oracle Database 10g Pl_Sql Programming

    - **性能优化**:通过合理使用索引、减少网络往返次数、避免数据类型的隐式转换等方式提高程序的执行效率。 - **安全性考虑**:确保PL/SQL程序遵循最小权限原则,并对输入数据进行适当的验证和清理,防止SQL注入等...

    .Oracle_9i10g_PLSQL编程详细(350页).pdf

    用户还可以定义自己的子类型,并且可以进行数据类型的转换。变量的可见性定义了变量的作用范围和生命周期。 PL/SQL提供了丰富的运算符和表达式,包括关系运算符、一般运算符和逻辑运算符。变量赋值是PL/SQL编程中不...

Global site tag (gtag.js) - Google Analytics