Teradata学习笔记

1. LIKE用法

select first_name,last_name from employee where last_name like all('%E%','%S%');

select first_name,last_name from employee where last_name like any/some('%E%','%S%');

 

Teradata缺省不区分大小写,如果要区分,可以使用其扩展参数CASESPECIFIC

select first_name,last_name from employee where last_name(CASESPECIFIC) like '%Ra%';

 

通配符作为一般字符使用

例:

LIKE "%A%%AAA__" ESCAPE"A"

在这个表达式中,讲字母A定义为ESCAPE字符,其中:

第一个%为通配符:

第一个A和其后的%联合表示字符%

第三个%为通配符

第二个A和其后的A联合表示字符A;

第四个和其后的'_'联合表示字符_

最后一个'_'为通配符

 

2. NULL的使用

当进行升序排列时,NULL在数字列排列在负数前,在字符排列在空格前

 

优先级和括号

逻辑运算符的缺省优先级顺序从高到低为:NOT.AND.OR

 

3. NOT

NOT既可以否定操作符,也可以否定条件表达式

否定操作符:

select first_name,last_name,employee_number from employee where department_number not =301;

否定条件:

SELECT first_name,last_name,employee_number FROM employee WHERE NOT(department_number=301);

 

4. 字符型数据

在ANSI标准中关于字符型数据定义了两类:CHAE和VARCHAR,Teradata除了上述两类基本字符数据外,还扩展了LONG VARCHAR类型,它等同于VARCHAR(64000),是最长的字符串

char(size)固定长度的字符串最大长度:64000字节

varchar(size)

char varying(size)

character varying(size) 这三个是可变长度字符串,最大长度:64000字节

long varchar 等同于varchar(64000)

5. 二进制数据

二进制数据类型是Teradata的扩展,ANSI标准没有此类型

BYTE(size) 固定长度的二进制串默认值:(1)最大值:64000字节

varbyte(size) 可变长的二进制串默认值:(1)最大值:64000字节

数字型数据

在ANSI标准中关于数字型数据定义了四类:SMALLINT.INTEGER.FLOAT.DECIMAL,Teradata还扩展了BYTEINT和DATE

smallint 整数 范围:-32768~32767

integer 整数 范围:-2147483648~2147483647

decimal(size,dec) 小数 最大:18位

numeric(precision,dec)  decimal的同义词

float  表示浮点数

float[(precision)] 通float

real  同float

double precision 双精度浮点数

byteint 有符号整数 范围-128~127

date 特殊整数,格式为YYMMDD或yyymmdd表示日期

6. 图形数据

graphic[(n)] 固定长度的图形字符串默认长度:1

vargraphic(n) 可变长的图形字符串

long vargraphic 可变长的图形字符串

 

7. 算术运算符

**(求幂)

mod(取模)

 

8. 系统变量

date当前系统日期

time系统时间

user当前登陆的用户

database当前缺省的数据库

 

9. 字符常量.数字常量和计算模式

字符文字在ANSI方式下区分大小写,而在Teradata缺省模式下不区分大小写

数字型常量最多可以包含15个数字,数字前面的零是无意义的

计算模式是指在SQL的SELECT语句中直接进行数学计算,如下:

select 2*2593;

 

10. 日期计算

例:1997年3月31日的表达方式

year=(1997-1900)*10000=970000

month=(3*100)=300

day=31

date=970331

 

11. 于日期有关的数据函数

1.EXTRACT

ANSI标准中EXTRACT函数允许选取日期和时间中任意段或任意间隔的值,Teradata中EXTRACT函数支持日期数据中选取年.月.日.从时间数据中选取小时.分钟和秒

SELECT DATE;  96/11/07

SELECT EXTRACT(YEAR FROM DATE);    1996

SELECT EXTRACT(MONTH FROM DATE+30); 12

SLEECT EXTRACT(DAY FROM DATE+2);  09

SELECT TIME;  14:52:32

SELECT EXTRACT(HOUR FROM TIME); 14

SELECT EXTRACT(SECOND FROM TIME+30);  INVALID TIME

2.ADD_MONTHS

 

12. 利用CAST作数据转换

1. ANSI标准中利用CAST函数将一种数据类型转换成另一种数据类型

select cast(salary_amount as integer) from employee;

select cast(salary_amount as dec(6,0)) from employee;

select cast(last_name as char(5)) from employee where department_number=401;

Teradata也可以利用CAST函数来完成上面的操作,另外,它也作了扩充.为了完成上面相同的操作,也可以使用下面的表达方式

select salary_amount(integer);

select salary_amount(dec(6,0));

select last_name(char(5));

Teradata对CAST函数本身也作了扩展,比如为了将显示结果以大写表示,可以使用下面的SQL语句

select cast(last_name as char(5) uppercase) from employee where department_number=401;

 

13. 简单的宏

宏(Macro)的基本特征是:

可以包含一条或多条SQL语句

可以包含多个BETQ语句

可以包含注解

存储在数据字典中

 

宏的定义

create macro birthday_list as

(select last_name,first_name,birthdate from employee where department_number=201 order by birthdate;

);

 

宏的执行

exec birthday_list;

 

宏的删除

drop macro birthday_list;

 

宏的显示和改变

show macro birthday_list

使用replace macro命令可以改变宏的定义

 

子查询

 

基本子查询

 

复杂子查询

在子查询中可以使用一些限制符,如下所示:

=any  等于 in

not=all 等于 not in

=some 等于 in

 

EXISTS在子查询中的使用

EXISTS可以使用在自查询中,用来表示查询至少返回一行.如果前面加上否定词not,则表示查询时无记录存在.exists可以代替in,而not exists可以代替not in

select 'YES' where exists(select department_number from department where department_number not in(select department_number from employee));

select true where exists(select * from employee where department_number=600);

 

关于子查询的一些基本规则

子查询必须用括号括起来

子查询可以是in或not in字句的操作目标

也可以是exists或not exists字句的操作目标

支持限定词all.any.some

支持like或not like

子查询中可以指定匹配多个字段

子查询结果均为唯一值,即自动去除重复记录,相当于自动加上distinct关键词

order by不能用于子查询内

子查询最多可以指定64个表或视图

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/challwang/archive/2008/08/31/2856138.aspx

 

 

14.  ANSI模式设置:Teradata SQL Assistant 12.0  在ODBC中配置:

在命令行:注意最前点。

.SET SESSION TRANSACTION ANSI  (在登陆之前设置)

可以将下述写入一个文件中:.run file  文件名

.SET SESSION TRANSACTION ANSI

LOGON demo/poc_bdsp,POC_BDSP;

 

 

15. The following SQL statements cannot be specified as dynamic SQL in stored procedures:

ALTER PROCEDURE

CALL

CREATE PROCEDURE

DATABASE

EXPLAIN modifier

HELP

OPEN

PREPARE

REPLACE PROCEDURE

SELECT

SET ROLE

SET SESSION ACCOUNT

SET SESSION COLLATION

SET SESSION DATEFORM

SET TIME ZONE

SHOW

Cursor statements, including:

CLOSE

FETCH

OPEN

16. Td的锁机制:

Oracle的锁理解的还可以,但是好象TERADATA的锁是反过来的,比如WRITE LOCK是可写的,READ LOCK是可读的.而官方教材上的介绍我越看越糊涂,谁能详细的给解惑一下呢?

Exclusive– prevents any other type of concurrent access
Write– prevents other reads, writes, exclusives
Read– prevents writes and exclusives
Access– prevents exclusive onlyThere

Exclusive排他锁,阻止其他任何并发访问
Write–
写锁,阻止其他任何读,写或者排他锁

--(这里理解为阻止创建排他锁的语句执行,如执行write的时候,在其他用户端是不支持表结构修改的)
Read
-读锁,阻止其他写锁和排他锁,但不阻止其他读锁
Access
-访问锁,只阻止排他锁

 

四种类型的锁:

 

Exclusive–prevents any other type of concurrent access

 

Write–prevents other reads, writes, exclusives

 

Read–prevents writes and exclusives

 

Access–prevents exclusive only

 

锁被应用的级别:

 

Database–applies to all tables/views in the database

 

Table/View–applies to all rows in the table/views

 

Row Hash–applies to all rows with same row hash

 

基于 SQL 命令自动获得的锁类型:

 

SELECT–applies a Read lock

 

 

UPDATE–applies a Write lock

 

 

CREATE TABLE–applies an Exclusive lock

 

程序中经常用的就是三种锁

锁类型

创建该锁操作类型

排他类型

支持并发操作

Exclusive lock

DDL,如drop,create,alter

任何其它操作

Read    lock

Dml , 如select

Write,创建exclusive lock 的操作

Read

Write   lock

Dml, 如insert,update,delete

Write,read, 创建exclusive lock 的操作

基本无

具体说明可参考《1093.pdf》

Bteq 模式下,基本采用的是隐式事物提交,即一个”;”作为一次事务提交了。所以这些加锁机制就显现不出了,但如果调整为 “use manual commit mode for ansi session”,效果就明显了。

 

 

可以通过下面命令降低或者提高锁等级,可以提高所有等级的锁,降低锁等级只可以把Read 降为Access,其它等级不能降低,例,

LOCKING ROW FOR ACCESS SELECT * FROM Table_A;

LOCKING TABLE Table_B FOR EXCLUSIVE UPDATE Table_B SET A = 2007;

LOCKING TABLE Table_C FOR WRITE NOWAIT UPDATE Table_C SET A = 2008;

 

总之:针对 update ,insert ,deleteSQL语句一定要及进commit

针对表的查询尽量用视图屏蔽其锁机制。

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fanxiaoliang83/archive/2009/10/20/4705205.aspx

 

 

 

17. 游标的中不能有事务提交语句

A FOR CURSOR loop does not permit a COMMIT, ROLLBACK, or ABORT within the

FOR loop. If the system detects a COMMIT, ROLLBACK, or ABORT during compile

time, it returns an error and does not create the stored procedure.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值