--匿名块
declare
a int :=200;
b int :=100;
c number;
begin
c :=(a + b)/(a - b);
dbms_output.put_line(c);
exception
when zero_divide then
dbms_output.put_line('除数不能为零');
end;
Oracle独有
Procedural langguage 过程化程序设计语言 client->application->database server
- 结构:[declare(声明)]->begin(执行)->[exception(异常处理)]->end;
- 分类:匿名块—-命名块(子程序procedure,包)—-触发器(特殊procedure)
--procedure
create [or replace] procedure |procedure_name()| is|as... --声明
begin --执行
....;
end; --结束
--一个存储过程
execute proceduer_name; --命令行执行
procedure_name; --匿名块里执行
create or replace trigger trigger_name
before insert or update or delete
on table_name
declare
...
begin
if inserting then
- 事务Transaction
数据类型
- 数值number(p,s)
- 字符varchar2 char..
- 日期date timestamp
- 布尔boolean
特殊类型
- copy 数据类型 ->|table.column|%type number(2,7)->number(2,7) ->|name| |table.column|%type
- 复合数据类型 -> %rowtype -> cope表的数据类型 -> |name| |table|%rowtype
- 自定义复合数据类型 -> record ->
type |type_name| is recoed(
|var_name| |table.column|%type := [value];
-------
-------
-------
); --定义类型
|name| |type_name|; --实例
- session -> variable |var_name| |类型| ->select _ into_session_name_from_….
- 替换变量 -> & 键入
select * from emp where deptno = &|提示|;
declare
- (在此声明)
- 变量->var_name varchar2(10) [:= |value|]
- 常量->|name| constant |类型| [:= |value|]
begin
- 变量赋值 -> select…into 变量…from…where…
- 输出 -> dbms_output.put_line(value)
- 流程控制
- 选择语句
- if [条件表达式] then…end if ;
- if..then…else…end if;
- is [条件表达式] then,,,elsif [条件表达式] …
- case || when|| then
- 循环语句
- loop … exit when |表达式| end loop;
- while |表达式| loop…end loop;
- for |计数器| in [reverse] 1..100 loop …end loop ,reverse->100..1
- for … in … loop … end loop;
- 顺序语句
- null
- goto 标签,定义位置<
- continue when |条件| -> 满足时loop从头开始
- break when
- 游标
- 显式游标:需要声明->打开->读取->close
> -> goto loopstart
Cursor是处理数据的一种方法去查找(select)和处理(insert,delete,update)结果集,一次一行的浏览数据(缓冲区Context Area里的结果集),默认指向第一行数据的一个指针
corsor corsor_name(var_name in|out var_类型:='default') is select...; --声明corsor and var_name用于查询
open corsor_name('value'); --打开它修改默认值
fetch corsor_name into 变量; --读取corsor数据并自动往下一行
while cur_name%found loop
--
end loop;
close cursor_name;
%found : bool 读取成功true
%notfound : !%found
%rowcount : number,受sql影响的行数
%isopen : 游标的打开状态
exception
...
exception
when exception_name then
...
- 自定义异常->