【序】
为了在工作中写存储过程,。同时,我准备写学习《精通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;