
(作者: 沈阳大学 王志新)
一、嵌套块:
declare
v_author AUTHOR.FIRST_NAME%TYPE;
begin
begin
select first_name
into v_author
from authors
where upper(last_name) = 'HARTMAN';
exception
when no_data_found
then
dbms_output.put_line('Exception handler for block 1");
dnms_output.put_line('=============================");
null; --表示要在此忽略异常,继续进行
end;
begin
select first_name
into v_author
from authors
where UPPER(last_name) = 'HARDMAN';
exception
when too_many_rows
then
dnms_output.put_line("Exception hand");
end;
end;
二、触发器:
create or replace trigger author_trig
after update of first_name
on authors
for each row
when (OLD.first_name != NEW.first_name)
begin
dbms_output.put_line('First name '
|| :OLD.first_name || '
has change to '||:NEW.first_name);
end;
三、PL/SQL 语言规则:
1,不区分大小写
2,最大长度30
3,查看保保留字符:(必须以SYSDBA or SYSOPER身份运行)
SET pages 9999
select keyword
form v_$reserved_words
where length = 1
and keyword != 'A'
or keyword = '<<';
4,分隔符:
: 绑定变量分隔符
:= 付值分隔符
@ 数据库连接分隔符
=> 联合操作符,向过程函数参数传值时用
|| 串联操作符
5,布尔值:true false null
四、PL/SQL 数据类型
1、字符定义
v_str varchar(10) //存10个字节
v_str varchar(10,char);//存10个字符,与一个字符占几个字节无关.
2、数值类型
number可以存整数,也可以存浮点数
v_num number(长度,精度),
比如对于12.345 保存在number(5,2)中是12.35,
保存在number(5,-1)中是10 截取前会四舍五入
3,日期/时间类型:
DATE 可用内置函数to_date 和 to_char 在安符串与日期间进行转换
TIMESTAMP 与date相似,不同处是TIMESTAMP提供秒民下度量精度,秒以后有9位数字
TIMESTAMP WITH TIMEZONE, 同TIMESTAMP,但可指定本地时间与格林威治时间的相对关系
TIMESTAMP WITH LOCAL TIMEZONE
INTERVAL YEAR TO MONTH :
SYSTIMESTAMP + INTERVAL 10-3 YEAR TO MONTH 当前时间加10年3个月
INTERVAL DAY TO SECOND :
SYSTIMESTAMP + INTERVAL 19 9:0:0.0 DAY TO SECOND 19天9小时之后的时间。
4、引用类型,(类似指针)
有两种:SYS_REFCURSOR 和REF
create or replace procedure athors_sel(
cv_results in out sys_refcursor)
is
begin
open cv_results for select id,first_name,last_name from authors;
end;
五、变量
定义:variable_name[CONSTANT] type [NOT NULL][:=VALUE] //加constant表示为常量
%TYPE: v_name authors.last_name%TYPE 表示与authors.last_name类型同
%ROWTYPE: v_author authors%ROWTYPE 该变量可存贮表中一行记录。
六、oracle查询过程
执行三个阶段:解析PARSE, 执行EXECUFE,取值FETCH
PARSE阶段,查询语句会被分解为散列值,再将查询语句句法和它的散列值一起与最近运行的那些查询进行
比较,以确定该查询语句是否与其中的某个查询相匹配。如果匹配,ORACLE就会越过产生执行计划的这一步处理过
程,如果没有匹配的,ORACLE就会选用它认为执行代价最低的那个执行计划来访问所需要的数据。
可是alter session set sql_trece = true 来显示语句执行细节
七、代码隐藏功能
wrapper命令可以将代码变为地十六进制。
wrap iname=input_file.sql oname=output_file.plb (wrap位于ORACLE/bin目录下)
运行转换后的文件可先运行原始脚本 SQL>@wrapseedsql 再运行找包文件 SQL>@Warpafter.sql