Oracle PLSQL语法

一、块结构
[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;
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值