嗨 甲骨文【1】

作者为写存储过程开始Oracle编程,并记录《精通Oracle 10g PL/SQL编程》学习笔记。介绍了SQL各类语言,如DQL、DML等,还提及PL/SQL块结构、变量类型、命令行使用注意事项,以及分组函数、流程控制语句等,也分享了面试相关经历。

【序】
为了在工作中写存储过程,我开始了梦寐以求的Oracle编程。同时,我准备写学习《精通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时可没这等好事。

<o:p> </o:p>

PL/SQL块结构<o:p></o:p>

DECLARE

/*定义部分*/

BEGIN

/*执行部分*/

EXCEPTION

/*例外处理部分*/

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

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

<o:p> </o:p>

四大块类型

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

四大变量类型

标量(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; ß动态确定新的类型和长度

<o:p> </o:p>

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

<o:p> </o:p>

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

<o:p> </o:p>

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

<o:p> </o:p>

处理NULLNVL(expr1,expr2) 如果expr1null则返回expr2;如果不是则返回expr1两者类型要匹配

<o:p> </o:p>

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

<o:p> </o:p>

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

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

<o:p> </o:p>

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

<o:p> </o:p>

只读事务:SET TRANSACTION READ ONLY;

                或者:exec dbms_transaction.read_only

<o:p> </o:p>

分组函数

MAXMINAVGSUMCOUNTVARIANCE(方差)STDDEV(标准偏差)

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

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

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

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

<o:p> </o:p>

Oracle的流程控制语句<o:p></o:p>

IF语句

IF      THEN

ELSIF  THEN

ELSE

END IF;

<o:p> </o:p>

CASE语句(9i)

CASE

   WHEN   THEN

ELSE

END CASE;

<o:p> </o:p>

基本循环

<st1:place w:st="on">LOOP</st1:place>

   EXIT[WHEN  ];

END <st1:place w:st="on">LOOP</st1:place>;

<o:p> </o:p>

WHILE循环

WHILE   <st1:place w:st="on">LOOP</st1:place>

END <st1:place w:st="on">LOOP</st1:place>;

<o:p> </o:p>

FOR       循环

FOR _v in[REVERSE] lo..hi LOOP

END <st1:place w:st="on">LOOP</st1:place>;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值