给变量赋值用 := 赋值 。
连接两个字符串用 || 连接,用加号是不好使的!
str1:=str2||str3;
if 条件 then
—业务逻辑
elsif 条件 then
—业务逻辑
end if;
其中的elsif需注意,并不是elseif。
游标的格式:
cursor c1 is select * from emp where deptno=10; —-给游标赋值
是is不是as!
游标是写在declare下的。
关于游标与for的应用:
declare
cursor c1 is select * from emp where deptno=10; ----给游标赋值
v_obj emp%rowtype;
begin
for v_obj in c1 ---帮助我们做 open 和close 操作
loop
dbms_output.put_line(v_obj.empno || '==' || v_obj.ename);
end loop;
end;
带参数的游标是在打开游标时赋予参数值的:
declare -----参数的变量类型 不能写长度
cursor c1(dno number) is select * from emp where deptno=dno; ----给游标赋值
v_obj emp%rowtype;
begin
open c1(20); ----打开游标 并赋值
loop
fetch c1 into v_obj;
exit when c1%notfound; ----判断游标为空后跳出
dbms_output.put_line(v_obj.empno || '==' || v_obj.ename);
end loop;
close c1 ;----关闭游标
end;
存储过程:
是预编译到数据库的一段业务逻辑代码。
编写格式:
create [or replace] procedure 存储过程名称 (参数名称 [in]/out 参数的数据类型 ...)
as/is
---变量声明
begin
----业务逻辑
end;
存储过程的调用有两种方式:
-------------调用---------------
---1. 不常用
call get_year_sals(7788);
---2. 常用
begin
get_year_sals(7782);
end;
1方式不常用是因为它接收不了out类型的参数。
存储函数:
格式:
create [or replace] function 存储函数名称(参数名称 [in]/out 参数的数据类型 ...)return 返回值数据类型
as /is
begin
retrun 返回值;
end;
存储函数与存储过程功能都差不多,存储函数的retrun返回值功能存储过程可以通过out类型的参数达到。
在调用时,返回值必须接收!
存储过程与存储函数的区别:
——-1. 语法稍有区别
——-2. 存储函数 能出现在sql语句中 存储过程不能
------自定义单行函数
select e.*,get_year_sals_fun(e.empno) from emp e ;
触发器:
格式:
create [or replace] trigger 触发的名称
before/after
insert/update/delete
on 表
for each row
declare
begin
end;
在工作中一般用不到触发器,因为功能太强大,风险性太大。
触发器可以用来oracle的主键的自增赋值,其中用到了序列:
create or replace trigger tri_id_emp
before
insert
on emp
for each row
declare
v_id number(10);
begin
select seq.nextval into v_id from dual;
:new.empno :=v_id;
end;
注:触发器有两个级别,
———–语句级触发器 默认不写指令
———–行级触发器 如果要用 :old :new 必须写 for each row
:old 表示执行修改语句时修改之前的记录,并不是单一的字段,是整行记录。
:new表示执行修改语句时修改之后的记录