您的当前位置:首页正文

DB2与Oracle不同的常用SQL写法记录

2020-11-09 来源:步旅网

DB2与Oracle不同的常用SQL写法记录,在创建索引时,可以选择包含额外的列数据,这些额外的列数据将与键存储在一起,但实际上它们

1、查看前3行数据,列别名如果没有AS 子句,派生的列会命名为 2,这表示它是结果集中的第二列。

db2 => select name,salary+comm from staff fetch first 3 rows only
NAME 2
--------- ----------
Sanders -
Pernal 78783.70
Marenghi -
3 record(s) selected.

2、db2支持通过“,”分隔在同一个insert语句中插入多个值

db2 => insert into tt values(1),(1)
DB20000I The SQL command completed successfully.
3、db2没有"create table TABLE_A as select ****"语句,创建表结构一致的表只能通过

db2 => create table pers like staff
DB20000I The SQL command completed successfully.

4、UPDATE 语句用来修改表或视图中的数据。通过指定 WHERE 子句,可以修改满足条件的每一行的一个或多个列的值。

db2 => update staff set (dept,salary)=(51,70000) where id=150
DB20000I The SQL command completed successfully.
Oraclehedb2都支持下列写法

update tttt set id=3,name='c' where id=1;
5、数据修改操作(插入、更新或删除)的目标中的列变成中间结果表中的列,可以在查询的选择列表中按名称引用这些列

db2 => select salary from old table(update staff set salary=salary*0.2 where id=10)
SALARY
---------
19671.50
1 record(s) selected.

db2 => select salary from old table(update staff set salary=salary*0.2 where id=10)
SALARY
---------
3934.30
1 record(s) selected.

6、事务处理上,db2默认进行自动提交,如需要显示创建事务,则应显示指定"+c"参数,这里应注意,如果指定了事务,即使ddl语句db2也需要提交或者回滚,db2不会显示或隐示的回滚事务。

会话1

db2 => connect to sample
Database Connection Information
Database server = DB2/LINUX 9.7.5
SQL authorization ID = DB2INST1
Local database alias = SAMPLE

db2 => select * From czm_1

可以看到会话1在执行完rollback语句后,找不到czm_1这个对象了,

db2 -td@ -vf createSQLproc.db2

db2 命令指定 -td 选项标志,这让命令行处理程序使用 @ 作为语句终止字符(因为在过程体内已经使用分号作为语句终止字符);-v 选项标志让命令行处理程序将命令文本回显到标准输出;-f 选项标志让命令行处理程序从指定的文件(而不是标准输入)读取命令输入。
8、在指定表空间内创建表

db2 => create table books(bookid integer,bookname varchar(100),isbn char(10)) in userspace1

9、对表列特征的修改
以下语句将 BOOKNAME 列的 DATATYPE 从 VARCHAR(100) 改为 VARCHAR(200),并将 ISBN 列的可空性改为 NOT NULL:

db2 => alter table books alter bookname set data type char(150) alter isbn set not null
DB20000I The SQL command completed successfully.
修改表列的限制:
在修改字符串列的长度时,只能增加长度。
在修改列的数据类型时,新的数据类型必须与现有的数据类型兼容。例如,可以将 CHAR 列转换为 VARCHAR 列,但是不能将它们转换为 GRAPHIC 或数字列。数字列可以转换为任何其他数字数据类型,只要新数据类型的长度足以容纳其中的值。例如,可以将 INTEGER 列转换为 BIGINT,但是 DECIMAL(10,2) 列不能转换为 SMALLINT。
固定长度的字符串可以转换为可变长度的字符串,,可变长度的字符串也可以转换为固定长度的字符串。例如,CHAR(100) 可以转换为 VARCHAR(150)。对于可变长度的图形字符串也有类似的限制。
表的某些特征不可以更改。例如,不可以修改某些列的数据类型、表驻留的表空间或列的次序。要更改这样的特征,必须保存表数据,删除表,然后重新创建表。

linux

显示全文