[DB2 学习记录]9. 访问对象

主要是关于SQL。
通用的SQL就不写了,记录一些个人觉得同ORACLE或SQL SERVER不同的写法。
     
取TOP的写法
SELECT * FROM staff FETCH FIRST 10 ROWS ONLY

返回修改前的记录值,关键字 OLD TABLE 指定中间结果表应该包含数据修改操作之前的值
SELECT * FROM OLD TABLE (UPDATE employee SET salary = salary * 1.07  WHERE empno = '000220')

返回修改后的记录值,关键字 FINAL TABLE 指定中间结果表应该包含数据修改操作、引用完整性计算和触发操作后触发器之后的值。
SELECT * FROM FINAL TABLE (  INSERT INTO customers (cust_name) VALUES ('Lamarr'))

SELECT * FROM FINAL TABLE (UPDATE employee SET salary = salary * 1.07  WHERE empno = '000220')
 
自增长ID
CREATE TABLE customers (
  cust_id INTEGER GENERATED ALWAYS AS IDENTITY (
   START WITH 10001
  ),
  cust_name VARCHAR(12),
  PRIMARY KEY (cust_id)
);

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

createSQLproc.db2
CREATE PROCEDURE sales_status
(IN quota INTEGER, OUT sql_state CHAR(5))
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
  DECLARE SQLSTATE CHAR(5);
  DECLARE rs CURSOR WITH RETURN FOR
  SELECT sales_person, SUM(sales) AS total_sales
    FROM sales
    GROUP BY sales_person
    HAVING SUM(sales) > quota;
  OPEN rs;
  SET sql_state = SQLSTATE;
END @

返回结果集的方法是:
   1. 在 DYNAMIC RESULT SETS 子句中声明 SQL 过程返回的结果集数量。
   2. 在过程体中为返回的每个结果集声明一个游标(使用 WITH RETURN FOR 子句)。
   3. 打开返回的每个结果集的游标。
   4. 当 SQL 过程返回时,让游标打开着。
  
db2 "CALL sales_status (25, ?)"


用户定义函数
CREATE function ca (r DOUBLE)
  RETURNS DOUBLE
  LANGUAGE SQL
  CONTAINS SQL
  NO EXTERNAL ACTION
  DETERMINISTIC
  RETURN 3.14159 * (r * r);
NO EXTERNAL ACTION 子句指出这个函数不会对数据库管理程序不管理的对象的状态有任何影响。
DETERMINISTIC 关键字指出这个函数对于给定的参数值总是返回相同的结果。在查询优化期间会使用这个信息。 
 
 
内置的 数据类型分为四类:数字、字符串、日期时间和 XML。
用户定义的数据类型分为:单值类型、结构化类型和引用类型。

复制表结构
CREATE TABLE MYBOOKS LIKE BOOKS

CREATE TABLE 语句将 BOOKS 表放在 BOOKINFO 表空间内:
CREATE TABLE BOOKS ( BOOKID INTEGER,
                     BOOKNAME VARCHAR(100),
                     ISBN CHAR(10) )
             IN BOOKINFO

修改表
ALTER TABLE BOOKS ALTER BOOKNAME SET DATA TYPE VARCHAR(200) ALTER ISBN SET NOT NULL            
                   
聚集索引
可以创建象SQL SERVER 一样的聚集索引.

在索引中使用包含的列
CREATE UNIQUE INDEX IBOOKID ON BOOKS (BOOKID) INCLUDE(BOOKNAME)
包含额外的列数据,这些额外的列数据将与键存储在一起,但实际上它们不是键本身的一部分,所以不被排序。


看起来,象SQL SERVER的多一点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值