当前位置:文档之家› 动态SQL支持所有的SQL类型

动态SQL支持所有的SQL类型

动态SQL支持所有的SQL类型
动态SQL支持所有的SQL类型

动态SQL支持所有的SQL类型。所以,定义变量和绑定变量都可以是集合、LOB,对象类型实例和引用。作为一项规则,动态SQL是不支持PL/SQL特有的类型的。这样,它就不能使用布尔型或索引表。

我们可以重复为绑定变量指定新值执行动态SQL语句。但是,每次都会消耗很多资源,因为EXECUTE IMMEDIATE在每次执行之前都需要对动态字符串进行预处理。

1、动态SQL实例

下面的PL/SQL块包含了几个动态SQL的例子:

DECLARE

sql_stmt VARCHAR2(200);

plsql_block VARCHAR2(500);

emp_id NUMBER(4) := 7566;

salary NUMBER(7, 2);

dept_id NUMBER(2) := 50;

dept_name VARCHAR2(14) := 'PERSONNEL';

LOCATION VARCHAR2(13) := 'DALLAS';

emp_rec emp%ROWTYPE;

BEGIN

EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';

sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';

EXECUTE IMMEDIATE sql_stmt

USING dept_id, dept_name, LOCATION;

sql_stmt := 'SELECT * FROM emp WHERE empno = :id';

EXECUTE IMMEDIATE sql_stmt

INTO emp_rec

USING emp_id;

plsql_block := 'BEGIN emp_pkg.raise_salary(:id, :amt); END;';

EXECUTE IMMEDIATE plsql_block

USING 7788, 500;

sql_stmt :=

'UPDATE emp SET sal = 2000 WHERE empno = :1 RETURNING sal INTO :2';

EXECUTE IMMEDIATE sql_stmt

USING emp_id

RETURNING INTO salary;

EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num' USING dept_id;

EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE TRUE'; END;

sql中将数字转换为字符串—STR()

sql 中将数字转换为字符串的最简单方法 2010年01月22日星期五下午08:04 STR 由数字数据转换来的字符数据。 语法 STR (float_expression[ ,length[ ,decimal] ] ) 参数 float_expression 是带小数点的近似数字(float) 数据类型的表达式。 length 是总长度,包括小数点、符号、数字或空格。默认值为10。 decimal 是小数点右边的位数。 返回类型 char 注释 如果为STR 提供length和decimal参数值,则这些值应该是正数。在默认情况下或者小数参数为0 时,数字四舍五入为整数。指定长度应该大于或等于小数点前面的数字加上数字符号(若有)的长度。短的float_expression在指定长度内右对齐,长的float_expression则截断为指定的小数位数。例如,STR(12,10) 输出的结果是12,在结果集内右对齐。而STR(1223, 2) 则将结果集截断为**。可以嵌套字符串函数。 说明若要转换为Unicode 数据,请在CONVERT 或CAST 转换函数内使用STR。示例 A. 使用STR 下例将包含五个数字和一个小数点的表达式转换为有六个位置的字符串。数字的小数部分四

舍五入为一个小数位。 SELECT STR(123.45, 6, 1) GO 下面是结果集: ------ 123.5 (1 row(s) affected) 当表达式超出指定长度时,字符串为指定长度返回**。 SELECT STR(123.45, 2, 2) GO 下面是结果集: -- ** (1 row(s) affected) 即使数字数据嵌套在STR内,结果集也是带指定格式的字符数据。SELECT STR (FLOOR (123.45), 8, 3) GO 下面是结果集: -------- 123.000 (1 row(s) affected) B. 使用STR 和CONVERT 函数

数据库表及字段命名、设计规范

数据库表及字段命名、设计规范1、命名规范 1.1数据表的命名规范: 1)表的前缀应该用系统或模块的英文名的缩写(全部大写或首字母大写)。如果系统功能简单,没有划分为模块,则可以以系统英文名称的缩写作为前缀,否则以各模块的英文名称缩写作为前缀。例如:如果有一个模块叫做BBS(缩写为BBS),那么你的数据库中的所有对象的名称都要加上这个前缀:BBS_ + 数据库对象名称,BBS_CustomerInfo标示论坛模块中的客户信息表。 2)表的名称必须易于理解,使用能表达表功能的英文单词或缩写英文单词,无论是完整英文单词还是缩写英文单词,单词首字母必须大写。如果当前表可用一个英文单词表示的,请用完整的英文单词来表示;例如:系统资料中的客户表的表名可命名为:SYS_Customer。如果当前表需用两个或两个以上的单词来表示时,尽量以完整形式书写,如太长可采用两个英文单词的缩写形式;例如:系统资料中的客户物料表可命名为:SYS_CustItem。 3)表的名称一般使用名词或者动宾短语 4)表名称不应该取得太长(一般不超过三个英文单词)。 5)在命名表时,用单数形式表示名称。例如,使用Employee,而不是Employees。 6)对于有主明细的表来说。明细表的名称为:主表的名称+ 字符Dts。例如:采购定单的名称为:PO_Order,则采购定单的明细表为:PO_OrderDts 对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为int 型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序,如1,2,3……。 7)表必须填写描述信息

sql server 2008 数据类型

SQL Server 2008数据类型(1) SQL Server 2008数据类型(1) 在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型。 1.CREATE TYPE Address 2.FROM varchar(35) NOT NULL 如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数据类型,那么该操作可能需要很长时间。可以通过在Management Studio界面中脚本化这种改变来观察其原因。Management Studio再创建一个临时表,采用像tmpTableName这样的名称,然后将数据复制到该表中。最后,界面删除旧表并用新的数据类型重命名新表。当然,此过程中还涉及其他一些用于处理表中索引和其他任何关系的步骤。 如果有一个包含数百万条记录的大型表,则该过程可能需要花费十分钟,有时可能是数小时。为避免这种情况,可在查询窗口中使用简单的单行T-SQL语句来更改该列的数据类型。例如,要将Employees表中JobTitle列的数据类型改为varchar(70),可以使用如下语法。 1.ALTER TABLE HumanResources.Employee ALTER COLUMN JobTitle Varchar(70 ) 说明: 在转换为与当前数据不兼容的数据类型时,可能丢失重要数据。例如,如果要将包含一些数据(如15.415)的numeric数据类型转换为integer数据类型,那么15.415这个数据将四舍五入为整数。 您可能想对SQL Server表编写一个报表,显示表中每列的数据类型。完成这项任务的方法有很多种,但最常见的一种方法是连接sys.objects表和sys.columns表。在下面的代码中,有两个函数可能不太为您所熟悉。函数TYPE_NAME()将数据类型id转换为适当的名称。要进行反向操作,可使用TYPE_ID()函数。需要注意的另一个函数是SCHEMA_ID(),它用于返回架构的标识值。在需要编写有关SQL Server元数据的报表时,这是特别有用的。 1.SELECT https://www.doczj.com/doc/ce7240271.html, AS ObjectName, 2. https://www.doczj.com/doc/ce7240271.html, AS ColumnName, 3.TYPE_NAME(https://www.doczj.com/doc/ce7240271.html,er_type_id) as DataType 4.FROM sys.objects o JOIN sys.columns c 5.ON o.object_id = c.object_id

数据库数据类型

MySQL 数据类型在MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。 Text类型 数据类型描述 CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多255 个字符。 VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多255 个字符。注释:如果值的长度大于255,则被转换为TEXT 类型。 TINYTEXT 存放最大长度为255 个字符的字符串。 TEXT 存放最大长度为65,535 个字符的字符串。 BLOB 用于BLOBs (Binary Large OBjects)。存放最多65,535 字节的数据。MEDIUMTEXT 存放最大长度为16,777,215 个字符的字符串。 MEDIUMBLOB 用于BLOBs (Binary Large OBjects)。存放最多16,777,215 字节的数据。LONGTEXT 存放最大长度为4,294,967,295 个字符的字符串。 LONGBLOB 用于BLOBs (Binary Large OBjects)。存放最多4,294,967,295 字节的数据。 ENUM(x,y,z,etc.) 允许你输入可能值的列表。可以在ENUM 列表中列出最大65535 个值。如果列表中不存在插入的值,则插入空值。 注释:这些值是按照你输入的顺序存储的。可以按照此格式输入可能的值:ENUM('X','Y','Z') SET 与ENUM 类似,SET 最多只能包含64 个列表项,不过SET 可存储一个以上的值。 Number类型: 数据类型描述 TINYINT(size) -128 到127 常规。0 到255 无符号*。在括号中规定最大位数。 SMALLINT(size) -32768 到32767 常规。0 到65535 无符号*。在括号中规定最大位数。 MEDIUMINT(size) -8388608 到8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 INT(size) -2147483648 到2147483647 常规。0 到4294967295 无符号*。在括号中规定最大位数。 BIGINT(size) -9223372036854775808 到9223372036854775807 常规。0 到18446744073709551615 无符号*。在括号中规定最大位数。 FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数。在d 参数中规定小数点右侧的最大位数。DOUBLE(size,d) 带有浮动小数点的大数字。在括号中规定最大位数。在d 参数中规定小数点右侧的最大位数。DECIMAL(size,d) 作为字符串存储的DOUBLE 类型,允许固定的小数点。 这些整数类型拥有额外的选项UNSIGNED。通常,整数可以是负数或正数。如果添加UNSIGNED 属性,那么范围将从0 开始,而不是某个负数。

动态SQL总结

关于动态SQL的一些总结 目的 动态SQL用于减小程序消耗并获取较高的执行性能,且容易编码,现越来越广泛的应用于数据库程序开发中。在SQL中,可以采用多种方式构造和执行动态SQL,比如EXECUTE IMMEDIATE、DBMS_SQL包等。由于ORACLE手册中并未覆盖这些功能,现简单说明下关于EXECUTE IMMEDIATE的用法。 名词定义 Oracle数据库开发PL/SQL块,常用SQL分为:静态SQL语句和动态SQL语句。 静态SQL,指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。 处理范围 ◆语句可变:允许用户在程序运行时,临时动态创建完整的语句 ◆条件可变:对于查询语句而言,语句的输出是确定的,但是查询子句(如WHERE 子句,GROUP BY子句,HAVING子句等)可变 ◆数据库对象等其他可变:对于别名,查询的表名、视图、过程名、DBLINK名等, 临时构建,均不确定。 语法 EXECUTE IMMEDIATEdynamic_string [INTO {define_variable [ , define_variable ] … |record}] [USING [IN | OUT | IN OUT ] bing_argument [, [IN | OUT | IN OUT ] bing_argument] … ]

[{RETURNING | RETURN} INTObind_argument [,bind_argument] … ] ◆dynamic_string用于指定存放SQL语句或PL/SQL块的字符串变量;define_variable 用于指定存放单行查询结果的变量;bind_argument用于存放传递的输入、输出变量。 ◆dynamic_string语句需用单引号括起来,需要使用特殊符号的地方需注意转义,如使 用引号时,用’’代替’;需要使用变量的地方,可以直接用:号加变量名,也可以用 || 连接符将直接调用变量。区别在于EXECUTE IMMEDIATE语句中,前者需要加USING传入变量,后者不用。 使用范例 1.一般执行语句: Begin EXECUTEIMMEDIATE'create table tab_test(test_code varchar2(200),test_value varchar2(20),remark varchar2(200))'; End; 2.带传入参数的动态语句(USING语句): 3.带传出参数的动态语句(INTO语句):

SQL数据库字段类型说明

SQL数据库字段类型说明

1)char、varchar、text和nchar、nvarchar、ntext char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。 后面三种数据类型和前面的相比,从名称上看只是多了个字母n,它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar 最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。 (2)datetime和smalldatetime datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。 smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。 (3)bitint、int、smallint、tinyint和bit bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。 int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。 tinyint:从0到255的整数数据。 bit:1或0的整数数据。 (4)decimal和numeric 这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p 之间的值,默认小数位数是0。 (5)float和real float:从-1.79^308到1.79^308之间的浮点数字数据。 real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real 的同义词为float(24)。

学习SQL应知道的动态SQL语句基本语法

精妙SQL详解 本文档由周公(周金桥)从网上搜集整理。版权归原作者所有。 欢迎访问本人博客:https://www.doczj.com/doc/ce7240271.html,/zhoufoxcn 2008-10-12 周公 目录 学习SQL应知道的动态SQL语句基本语法 (2) SQL Server数据库中经常用到的identity列 (3) “一网打尽”通用SQL数据库的查询语句(1) (3) 教你快速掌握一些异常精妙的"SQL"语句 (6) 实例讲解SQL Server中"Update"的用法 (7) 三种数据库利用SQL语句进行高效果分页 (8) 深入讲解SQL Server数据库的嵌套子查询 (9) 使用SQL视图查出所有的数据库字典 (10) 两个表间不存在的insert与存在的update (12) 实现跨多个表格的数据进行组合的SQL语句(1) (15) 深入讲解SQL Union和Union All的使用方法 (16) 巧用一条SQL 实现其它进制到十进制转换 (18) 实例讲解如何才能让你的SQL运行得更快(1) (19) 利用"SQL"语句自动生成序号的两种方式 (21) 详细讲解有关获取当月天数的实用技巧 (22) 为什么SQL不许在视图定义ORDER BY子句 (23) 一条SQL语句变得巨慢的原因及其解决方法 (23) 教你快速掌握SQL语句各种写法的效率问题 (24) 通过两个例子讲解PIVOT/UNPIVOT的用法 (25) 用一个实例讲解GROUP BY CEIL的使用方法 (27) 解析SQL语句中INSERT语句的另一种写法 (29) 轻松解决“每个Y的最新X”的SQL问题 (29) 教你快速掌握编写高效SQL语句的方法 (30) 个人经验总结:有关SQL语句的优化技术(1) (30) 用SQL语句删除重复记录的四种好方法 (32) 不要在SQL Server中盲目地追求一句处理(1) (35) 用人工智能技术自动对SQL语句进行重写(1) (38)

mysql字段类型

1. mysql的数据类型 在mysql中有如下几种数据类型: (1)数值型 数值是诸如32 或153.4 这样的值。mysql 支持科学表示法,科学表示法由整数或浮点数后跟“e”或“e”、一个符号(“+”或“-”)和一个整数指数来表示。1.24e+12 和23.47e-1 都是合法的科学表示法表示的数。而 1.24e12 不是合法的,因为指数前的符号未给出。 浮点数由整数部分、一个小数点和小数部分组成。整数部分和小数部分可以分别为空,但不能同时为空。 数值前可放一个负号“-”以表示负值。 (2)字符(串)型 字符型(也叫字符串型,简称串)是诸如“hello,world!”或“一个馒头引起的血案”这样的值,或者是电话号码这样的值。既可用单引号也可用双引号将串值括起来。 初学者往往分不清数值和字符串的区别。都是数字啊,怎么一个要用数值型,一个要用字符型呢?关键就在于:数值型的是要参与计算的,比如它是金融中的一个货款总额;而字符型的是不参与计算的,只是表示电话号码,这样的还有街道号码、门牌号码等等,它们都不参与计算。 (3)日期和时间型 日期和时间是一些诸如“2006-07-12”或“12:30:43”这样的值。mysql还支持日期/时间的组合,如“2006-07-12 12:30:43”。 (4)null值 null表示未知值。比如填写表格中通讯地址不清楚留空不填写,这就是null 值。 我们用create table语句创建一个表(参看前面的章节),这个表中包含列的定义。例如我们在前面创建了一个joke表,这个表中有content和writer 两个列: create table (

SQLServer的数据类型

SQLServer的数据类型 第一大类:整数数据 bit:bit数据类型代表0,1或NULL,就是表示true,false.占用1byte. int:以4个字节来存储正负数.可存储范围为:-2^31至2^31-1. smallint:以2个字节来存储正负数.存储范围为:-2^15至2^15-1 tinyint: 是最小的整数类型,仅用1字节,范围:0至此^8-1 第二大类:精确数值数据 numeric:表示的数字可以达到38位,存储数据时所用的字节数目会随着使用权用位数的多少变化. decimal:和numeric差不多 第三大类:近似浮点数值数据 float:用8个字节来存储数据.最多可为53位.范围为:-1.79E+308至1.79E+308. real:位数为24,用4个字节,数字范围:-3.04E+38至3.04E+38 第四大类:日期时间数据 datatime:表示时间范围可以表示从1753/1/1至9999/12/31,时间可以表示到3.33/1000秒.使用8个字节. smalldatetime:表示时间范围可以表示从1900/1/1至2079/12/31.使用4个字节. 第五大类:字符串数据 char:长度是设定的,最短为1字节,最长为8000个字节.不足的长度会用空白补上. varchar:长度也是设定的,最短为1字节,最长为8000个字节,尾部的空白会去掉. text:长宽也是设定的,最长可以存放2G的数据. 第六大类:Unincode字符串数据 nchar:长度是设定的,最短为1字节,最长为4000个字节.不足的长度会用空白补上.储存一个字符需要2个字节. nvarchar:长度是设定的,最短为1字节,最长为4000个字节.尾部的空白会去掉.储存一个字符需要2个字节. ntext:长度是设定的,最短为1字节,最长为2G.尾部的空白会去掉,储存一个字符需要2个字节.

sqlserver2008数据类型说明

sqlserver2008数据类型说明 SQL Server 2008数据类型(1) 在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型。 1.CREATE TYPE Address 2.FROM varchar(35) NOT NULL 如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数据类型,那么该操作可能需要很长时间。可以通过在Management Studio界面中脚本化这种改变来观察其原因。Management Studio再创建一个临时表,采用像tmpTableName这样的名称,然后将数据复制到该表中。最后,界面删除旧表并用新的数据类型重命名新表。当然,此过程中还涉及其他一些用于处理表中索引和其他任何关系的步骤。 如果有一个包含数百万条记录的大型表,则该过程可能需要花费十分钟,有时可能是数小时。为避免这种情况,可在查询窗口中使用简单的单行T-SQL语句来更改该列的数据类型。例如,要将Employees表中JobTitle列的数据类型改为varchar(70),可以使用如下语法。 1.ALTER TABLE HumanResources.Employee ALTER COLUMN JobTitle Varchar(70 ) 说明: 在转换为与当前数据不兼容的数据类型时,可能丢失重要数据。例如,如果要将包含一些数据(如15.415)的numeric数据类型转换为integer数据类型,那么15.415这个数据将四舍五入为整数。 您可能想对SQL Server表编写一个报表,显示表中每列的数据类型。完成这项任务的方法有很多种,但最常见的一种方法是连接sys.objects表和sys.columns表。在下面的代码中,有两个函数可能不太为您所熟悉。函数TYPE_NAME()将数据类型id转换为适当的名称。要进行反向操作,可使用TYPE_ID()函数。需要注意的另一个函数是SCHEMA_ID(),它用于返回架构的标识值。在需要编写有关SQL Server元数据的报表时,这是特别有用的。 1.SELECT https://www.doczj.com/doc/ce7240271.html, AS ObjectName, 2. https://www.doczj.com/doc/ce7240271.html, AS ColumnName, 3.TYPE_NAME(https://www.doczj.com/doc/ce7240271.html,er_type_id) as DataType 4.FROM sys.objects o JOIN sys.columns c 5.ON o.object_id = c.object_id

ORACLE关于动态SQL的使用

关于动态SQL的使用-----摘录 内容摘要:在PL/SQL开发过程中,使用SQL,PL/SQL可以实现大部份的需求,但是在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的需求,比如需要动态建表或某个不确定的操作需要动态执行。这就需要使用动态SQL来实现。本文通过几个实例来详细的讲解动态SQL的使用。 本文适宜读者范围:Oracle初级,中级 系统环境: OS:windows2000Professional(英文版) Oracle:8.1.7.1.0 正文: 一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现。 首先我们应该了解什么是动态SQL,在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句。所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。 Oracle中动态SQL可以通过本地动态SQL来执行,也可以通过DBMS_SQL包来执行。下面就这两种情况分别进行说明: 一、本地动态SQL 本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的。 1、本地动态SQL执行DDL语句: 需求:根据用户输入的表名及字段名等参数动态建表。 create or replace procedure proc_test ( table_name in varchar2,--表名 field1in varchar2,--字段名 datatype1in varchar2,--字段类型 field2in varchar2,--字段名 datatype2in varchar2--字段类型 )as str_sql varchar2(500); begin str_sql:=create table||table_name||(||field1||||datatype1||,||field2|| ||datatype2||); execute immediate str_sql;--动态执行DDL语句 exception when others then null; end; 以上是编译通过的存储过程代码。下面执行存储过程动态建表。

sql数据类型转换

sql数据类型转换(cast() and convent())函数) sql数据类型转换(cast() and convent())函数) 当Microsoft? SQL Server? 2000 不自动执行不同数据类型的表达式转换时,可使用转换函数 CAST 和 CONVERT 进行转换。这些转换函数还可用来获得各种特殊的数据格式。这两个转换函数都可用于选择列表、WHERE 子句和允许使用表达式的任何地方。 如果希望 Transact-SQL 程序代码遵从 SQL-92 标准,请使用 CAST 而不要使用CONVERT。如果要利用 CONVERT 中的样式功能,请使用 CONVERT 而不要使用CAST。 使用 CAST 或 CONVERT 时,需要两条信息: ?要转换的表达式(例如,销售报告要求销售数据从货币型数据转换为字符型数据)。 ?要将所给表达式转换到的数据类型,例如,varchar或 SQL Server 提供的任何其它数据类型。 除非将被转换的值存储起来,否则转换仅在 CAST 或 CONVERT 函数的作用期内有效。 在下面的示例中,第一个 SELECT 语句中使用 CAST,第二个 SELECT 语句中使用 CONVERT,将title列转换为char(50)列,以使结果更可读: USE pubs SELECT CAST(title AS char(50)), ytd_sales FROM titles WHERE type = 'trad_cook' 或 USE pubs SELECT CONVERT(char(50), title), ytd_sales FROM titles WHERE type = 'trad_cook' 下面是结果集:(对任何一个查询) ytd_sales ----------------------------------------- -----------

有用的字段类型和数据类型

有用的字段类型和数据类型 在vfp中,共有13种字段类型和7种数据类型.13种字段类型是:字符型,数值型,浮点型,双精度型,整型,货币型,日期型,日期时间型,逻辑型,备注型,通用型,二进制字符型和二进制备注型;而7种数据类型是:字符型,数值型,货币型,日期型,日期时间型,逻辑型和通用型.字段为表文件所特有,而数据既可做表文件中的字段内容,也可以做内存变量或常量使用. 1.字符型字段和字符型数据: 字符型字段用于存放字符型数据.字符型数据是指一切可印刷的字符,包括英文字母,阿拉伯数字,各种符号,汉字及空格. 上述"职工档案"表中的"编号"和"姓名"字段就属于字符型字段,而其中存储的编号和姓名就属于字符型数据.字符型字段的宽度为1~字节. 2.数值型,浮点型,双精度型,整型字段与数值型数据: 数值型字段按每位数1个字节存放数值型数据,而浮点型字段存放浮点型数据.这两者最大宽度为20位.整型字段存放整数,用该类型字段存放较大的整数可节省存储容量,因为它只占4个字节.双精度型字段用于存放双精度型数,常用于科学计算,可得15位精度,但只占8个字节.这些字段中存放在数据统称为数值型数据. 3.货币型字段和货币型数据:货币型字段用于存放货币型数据,但只占8个字节. 4.日期型字段和日期型数据:日期型字段用于存放日期型数据.常用格式为:"年.月.日"和"月/日/年".在"职工档案"表中,"出生日期"字段就是日期型字段,而其中存放的数据就是日期型数据. 5.日期时间型字段和日期时间型数据:日期时间型字段存放日期时间型数据,格式为:年.月.日小时:分:秒Am或pm. 6.逻辑型字段和逻辑型数据:逻辑型字段用于存放逻辑型数据.逻辑型数据只有两个值,即"真"和"假",常用于描述只有两种状态的数据.例如:在"职工档案"表中,"婚否"字段就是逻辑型字段,用"真"表示已婚,"假"值表示未婚.在输入逻辑型数据时,可用T,t,Y,y中的任一个代表"真",而用F,f,N,n中的任一个代表"假". 7.备注型字段:备注型字段用于存放字符型,如文本、源代码等,使其得到了广泛应用.它常用于记录可有可无、可长可短的情况.例如,假如要在"职工档案"表中增加一个"简历"字段,定义成备注型最合适,因为有些人的简历可能长些,有些人的简历可能短些.此外,备注型字段还可用于提供运行时的帮助. 记录在备注型字段中的,实际上并不存放在表文件中,而是存放在与表文件同名,但扩展名为.fpt的文件中.当创建表文件时,假如定义了备注型字段,则相应的备注文件会自动生成,会随表文件的打开而自动打开.

MyBatis学习 之三动态SQL语句

MyBatis学习之三动态SQL语句 三、动态SQL语句 MyBatis学习之一、MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习之二、SQL语句映射文件(1)resultMap MyBatis学习之二、SQL语句映射文件(2)增删改查、参数、缓存 MyBatis学习之三、动态SQL语句 MyBatis学习之四、MyBatis配置文件 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息。使用Oracle的序列、mysql的函数生成Id。这时我们可以使用动态sql。 下文均采用mysql语法和函数(例如字符串链接函数CONCAT)。 3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列、在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键。使用myBatis的selectKey标签可以实现这个效果。 下面例子,使用mysql数据库自定义函数nextval('student'),用来生成一个key,并把他设置到传入的实体类中的studentId属性上。所以在执行完此方法后,边可以通过这个实体类获取生成的key。 select nextval('student') INSERT INTO STUDENT_TBL(STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY, STUDENT_PHOTO, CLASS_ID, PLACE_ID) V ALUES (#{studentId}, #{studentName}, #{studentSex}, #{studentBirthday}, #{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler}, #{classId}, #{placeId}) 调用接口方法,和获取自动生成key StudentEntity entity = new StudentEntity(); entity.setStudentName("黎明你好"); entity.setStudentSex(1); entity.setStudentBirthday(DateUtil.parse("1985-05-28")); entity.setClassId("20000001"); entity.setPlaceId("70000001"); this.dynamicSqlMapper.createStudentAutoKey(entity); System.out.println("新增学生ID: " + entity.getStudentId()); selectKey语句属性配置细节: 属性描述取值keyProper ty selectKey 语句生成结果需要设置的属性。 resultTyp e 生成结果类型,MyBatis 允许使用基本的数据类型,包括String 、int 类型。 order 1:BEFORE,会先选择主键,然后设置keyProperty,再执行insert 语句; 2:AFTER,就先运行insert 语句再运行selectKey 语句。 BEFORE AFTER

数据库、表、字段的命名规则

数据库、表、字段的命名规则 每个公司或者企业数据库、表、字段等都有自己命名规则,数据库开发时数据库、表、字段、视图、触发器、存储过程、变量名、主键、外键、索引等的命名规则。 一、数据库(Database) 数据库名称 = 数据库内容标识(首字大写)。 二、表(Table) 命名应尽量反映存储的数据内容。 表名前缀:以该表及与该表相关联的一系列表的内容而得到一个代表统一的标识。 表名称 = T +‘_’+ 表名前缀+‘_’+ 表内容标识(首字大写) 。 如客户端信息ClientInfo相关联的一系的表以ci作为前缀,Record记录表即有表名:T_ci_Record。 数据库中不论是表名还是字段名,都一律用英文,不准出现其它语言;且保留原来的字段名,保留它们的规范。 为了不增加数据库当中的表名的长度,一般不允许出现如Form或者Table的字样,如:记录表:应为Record,而不是RecordTable。 数据库当中的表名的命名,一般不准出现空格,假如有几个单词出现的话,每个单词之间不允许留有空格,用”_”隔开如人事信息表:应为Human_Info,而不是Human Info;每个单词的第一个字母必须大写;如果太长,为了不增加编程的难度可采用缩写的方式,每个单词可取三到四个字母表示,也可根据实际情况,实际习惯进行缩写。 三、字段(Field) 字段是数据库中的用途最广泛的,它的类型非常多,所以必须加类型前缀来标示它的类型。 字段名称 = F + 字段类型前缀 + 字段内容标识(首字大写) 。 为了编程的方便性,可在前面加上字段类型的前缀,一般取用类型的三个字母,但是不需要下化线,而且这三个字母必须小写;如姓名字段为字符型的话就应该为chrName;尝用字段类型的缩写可参考下面的形式: 缩写- 类型 chr- char nvr- nvarchar vcr -varchar num -number flt -float dtm -date lng -long clb- clob blb- blob 四、视图名(View) 视图的名称 = "v_" + 视图内容标识(首字大写) 如 v_Record。 五、触发器名(Triger)

T-SQL中的数据类型(较全)

T-SQL中的数据类型 主要学习T-SQL的数据类型:数值型数据类型,字符型数据类型,临时数据类型,混合型数据类型,附带有VARDECIMAL的DECIMAL存储类型。 1、数值数据类型 2、字符型数据类型 字符型数据类型用两种普通形式。它们可以是单字节的字符串,还可以使Unicode字符串。此外,字符串有固定或可变长度。具体看下表:

注:VARCHAR数据类型和CHAR数据类型基本一样,只有一点不同,如果一个CHAR(n)字符串比n个字符要短,那么其余的字符串就会用空格来填充。VARCHAR数据类型经常用数据长度存储。 3、临时数据类型 T-SQL支持的临时数据类型有:DATETIME、SMALLDATETIME、DATE、TIME、DATETIME2和DETETINEOFFSET。 DATETIME和SMALLDATETIME数据类型指定日期和时间,每个值都为整数并分别用4个字节或2个字节保存。DATETIME和SMALLDATETIME的值是作为两个单独的数值保存的。DATETIME日期值的范围为01/01/1900至12/31/9999。SMALLDATETIME相应的值为01/01/1900至06/06/2079。时间部分能够再用4个字节或2个字节保存。它表示午夜过后的一秒的三百分之一(DATETIME)或分钟(SMALLDATETIME)。 如果只想保存日期或时间部分,那么使用DATETIME和SMALLDATETIME非常不方便。SQL SERVER 2008新增新的数据类型:DATE和TIME,这两种数据类型只能分别保存DATATIME数据的DATA或TIME部分。DATE数据类型用3个字节的保存并且范围为01/01/0001至12/31/9999。TIME数据类型用3-5个字节保存,且精确到100ns。 DATETIME2数据类型也是一种新的数据类型,用于保存精度度很高的日期和时间数据。这种数据类型能够根据要求定义可变长度。存储大小为6-8个字节。时间部分的精确度为100ns。 4、混合型数据类型 T-SQL的混合数据类型有:Binary,BIT,大对象数据类型,CURSOR,UNIQUEIDENTIFIER,SQL_VARTANT,TABLE,XML,Spatial,HIERARCHYID,TIMESTAMP和自定义数据类型。 4.1 BINARY和BIT BINARY和VARBINARY数据类型是两种二进制的数据类型。它们表示系统内部格式的数据对象。它们用来存储位串,因此这些值都是十六进制的数字。 4.2 大对象数据类型 大对象就是最大长度为2GB的数据对象。这些数据对象一般用来存储大型的文本数据、加载模块和音频/视频文件。T-SQL支持两种不同的指定和访问方式:使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)的数据类型;使用所谓的文本和图像数据类型。 TEXT、NTEXT和IMAGE数据类型组成了所谓的文本/图像数据类型。IMAGE类型的数据对象包含所有的数据(下载模块、音频/视频),而TEXT和NTEXT数据类型的数据对象包含文本数据。

Oracle过程中执行动态SQL或DDL语句

如果你用的是Oracle8i 及以上的版本,那简单,在过程中用 execute immediate sql_str 就行, sql_str 是一个拼凑的 SQL 语句,但这个动态语句中带参数,或 Select 的结果要 into 到变量中时就要稍加留心一下了。而在 8i 以前的版本(谁还用这么古老的玩艺,总有些不得已的地方,老系统考虑升级成本遗留下来的,应用软件所伴随着的等),都没法用 execute immediate,就得使用 DBMS_SQL 包来实现了 何谓动态 SQL 和 DDL 语句呢?通常在过程中要操作的表名、字段名都必须是明确的,否则编译过程时就要报错,但如果这两者也用变量名来表示就是动态的。DDL 就是数据库对象定义的操作,如 CREATE TABLE/VIEW/INDEX/SYN/CLUSTER……,及这些对象的删除、修改操作等等。 比如在Oracle中有执行下面过程块的意图时,就要使用到 execute immediate 或是DBMS_SQL 包了。当然下面的语句块是通不过的。 declare col_name varchar2(30) := 'name'; --假定表user存在name字段 col_val varchar2(30); begin select col_name into col_val --按照惯常思维,可能就会这么写 from user where age between 18 and 25; --编译时会提示列名不存在的 drop table t2; --不能直接执行 DDL 语句,后面查询 t2 编译器就无能为力了 end; 现在我们提出对上面问题的解,针对第一个 Select 语句来说明,并假设查询中还带有参数。块中的 DDL 也是类似的解法。例子因力图涵盖更多内容,所以稍显复杂,如果不需要 into (如 update/delete 语句),或者不带参数,会简单多了,应不难简化。有两种处理方法,以 8i 为分水岭。 1. Oracle 8i 及以上版本的过程中处理动态 SQL 语句的办法 declare

SQL字符转换成数值类型

SQL的datetime类型数据转换为字符串格式大全SELECT CONVERT(varchar,getdate()) ,CONVERT(varchar,getdate(),0) as '0' ,CONVERT(varchar,getdate(),1) as '1' ,CONVERT(varchar,getdate(),2) as '2' ,CONVERT(varchar,getdate(),3) as '3' ,CONVERT(varchar,getdate(),4) as '4' ,CONVERT(varchar,getdate(),5) as '5' ,CONVERT(varchar,getdate(),6) as '6' ,CONVERT(varchar,getdate(),7) as '7' ,CONVERT(varchar,getdate(),8) as '8' ,CONVERT(varchar,getdate(),9) as '9' ,CONVERT(varchar,getdate(),10) as '10' ,CONVERT(varchar,getdate(),11) as '11' ,CONVERT(varchar,getdate(),12) as '12' ,CONVERT(varchar,getdate(),13) as '13' ,CONVERT(varchar,getdate(),14) as '14' ,CONVERT(varchar,getdate(),100) as '100' ,CONVERT(varchar,getdate(),105) as '105' ,CONVERT(varchar,getdate(),110) as '110' ,CONVERT(varchar,getdate(),111) as '111' ,CONVERT(varchar,getdate(),112) as '112'

相关主题
文本预览
相关文档 最新文档