一、块结构
[declare
--声明变量
变量名 类型[:=值]
]
begin
具体代码
[exception
--异常的处理
]
end;
二、复合类型变量
1.表类型:用于存放某一数据类型的值
定义:type 名称 is table of 存放数据类型 index by binary_integer;
声明:变量名 名称;
例:
declare
type emp_empno is table of number index by binary_integer;
v_empno emp_empno;
begin
v_empno(0):=7788;
v_empno(1):=7839;
v_empno(2):=7369;
dbms_output.put_line(v_empno(0));
end;
2.记录类型:可用于存放多种类型的值
定义:type 名称 is record(存放变量名1 存放数据类型,...);
声明:变量名 名称;
例:
declare
type emp_record is record(ename varchar2(20),sal number);
v_record emp_record;
begin
v_record.ename:='略略略';
v_record.sal:=11000;
dbms_output.put_line(v_record.ename||v_record.sal);
end;
三、条件逻辑
if 条件判断 then
...
elsif 条件判断 then
...
else
...
end if;
四、循环
1.
loop
具体代码
exit when 条件判断
end loop;
2.
for 循环变量 in [reverse] 循环开始数字..循环结束数字|(select * from 表名) loop
具体代码
end loop;
3.
while 条件判断 loop
具体代码
end loop;
五、游标
1.隐示游标
begin
for i in(select * from emp) loop
dbms_output.put_line('姓名:'||i.ename||' 部门:'||i.deptno||' 年薪:'||12*(i.sal+nvl(i.comm,0)));
end loop;
end;
2.显示游标
declare
--声明变量
rowobj emp%rowtype;
--声明游标
cursor mycursor is select * from emp;
begin
--打开游标
open mycursor ;
--抓取数据
loop
fetch mycursor into rowobj;
exit when mycursor%notfound;
dbms_output.put_line('姓名:'||rowobj.ename||' 部门:'||rowobj.deptno||' 年薪:'||12*(rowobj.sal+nvl(rowobj.comm,0)));
end loop;
--关闭游标
close mycursor;
end;
3.动态游标
declare
--声明变量
rowobj emp%rowtype;
sqlVar varchar2(500);
--声明游标
mycursor sys_refcursor;
begin
sqlVar:='select * from emp';
--打开游标
open mycursor for sqlVar;
--抓取数据
loop
fetch mycursor into rowobj;
dbms_output.put_line('姓名:'||rowobj.ename||' 部门:'||rowobj.deptno||' 年薪:'||12*(rowobj.sal+nvl(rowobj.comm,0)));
exit when mycursor%notfound;--退出条件,没有数据
end loop;
--关闭游标
close mycursor;
end;
六、存储过程
例:实现大写字母转小写字母(lower(string)函数)的功能
create or replace function myfunction1(str1 varchar2)
return varchar2
is
n number;
str2 varchar2(200):='';
begin
for i in 1..length(str1) loop
n:=ascii(substr(str1,i,i));
if ascii(substr(str1,i,i)) between ascii('A') and ascii('Z') then
n:=n+32;
end if;
str2:=concat(str2,chr(n));
end loop;
return str2;
end;
七.触发器
当特定的DML语句(insert,update或delete)运行之前或之后自动运行的过程
create or replace trigger 触发器名
before|after insert[ or delete[ or update]] on 表名 for each row
begin
具体代码
end;
Oracle PLSQL语法
最新推荐文章于 2024-04-22 19:39:47 发布