嗨 甲骨文【1】

【序】
为了在工作中写存储过程,。同时,我准备写学习《精通 Oracle 10g PL/SQL 编程》(水利水电)一书的学习笔记。

这些你能不能写全:
Data Query Language--SELECT
Data Manipulation Language--INSERT,UPDATE,DELETE
Transactional Control Language--COMMIT,ROLLBACK,SAVEPOINT
Data Definition Language--CREATE TABLE,ALTER TABLE,DROP TABLE
Data Control Language--GRANT,REVOKE
一次应聘面试中,我就没能答出此类问题。想来只有惭愧,无他。

PL/SQL 能将 SQL 语句组合成块,一次传输,降低了网络开销,此等高效,往日用 SQL Server 时可没这等好事。

** PL/SQL ** ** 块结构 **

DECLARE

/* 定义部分 */

BEGIN

/* 执行部分 */

EXCEPTION

/* 例外处理部分 */

END; /* 块结束标记,此处有分号 */

/ /* 这是命令行中的结束符 */

四大块类型

匿名块、命名块、子程序(过程、函数、包)、触发器

四大变量类型

标量 (Scalar) 、复合 (Composite) 、参照 (Reference) 、 LOB(Large Object)

Composite:PL/SQL 记录、 PL/SQL 表、嵌套表、 VARRAY

参照:游标变量 (REF CURSOR) 、 对象类型变量 (REF obj_type)

LOB: 内部 LOB(CLOB,BLOB,NCLOB) 、外部 LOB(BFILE)

DECLARE

v_num NUMBER(6,2); ß 变量定死了长度,将来无法动态改变,只能手动修改

v_num tbl.num%TYPE; ß 动态确定新的类型和长度

挺像 Delphi: 1 变量赋值 := 2 记录 RECORD

在命令行中写 SQL 语句时注意:单条结束要用 ; 模块结束要用 / 才能显示你的查询

不重复显示查询: SELECT DISTINCT *FROM A_TBL

处理 NULL : NVL(expr1,expr2) 如果 expr1 是 null 则返回 expr2; 如果不是则返回 expr1 两者类型要匹配

删除表数据并释放空间: TRUNCATE TABLE

Oracle 不允许其他用户读取脏数据(未提交事务),确保数据库数据的读一致性

加锁,确保同一时间对文件的操作只能有一人

Savepoint 用于取消部分事务,事务结束后自动删除所有保存点。

只读事务: SET TRANSACTION READ ONLY;

或者: exec dbms_transaction.read_only

分组函数

MAX 、 MIN 、 AVG 、 SUM 、 COUNT 、 VARIANCE( 方差 ) 、 STDDEV( 标准偏差 )

GROUP BY 用于对查询结果进行分组统计――比如每组最大值

HAVING 用于限制分组显示结果――比如最大值小于 2800

ROLLUP 在原统计结果基础上生成横向小统计

CUBE 在原统计结果基础上生成纵向小统计

** Oracle ** ** 的流程控制语句 **

IF 语句

IF THEN

ELSIF THEN

ELSE

END IF;

CASE 语句 (9i)

CASE

WHEN THEN

ELSE

END CASE;

基本循环

LOOP

EXIT[WHEN ];

END LOOP ;

WHILE 循环

WHILE LOOP

END LOOP ;

FOR 循环

FOR _v in[REVERSE] lo..hi LOOP

END LOOP ;

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus