SQL的高阶用法-SQL函数编程

本文深入探讨了SQL的高阶用法,重点介绍了Oracle数据库中的PL/SQL编程,包括变量定义、if分支、LOOP循环、游标、存储过程和存储函数的创建,以及触发器的应用。通过实例解析,展示了如何使用PL/SQL进行数据处理和增强数据库应用的灵活性。
摘要由CSDN通过智能技术生成

SQL的高阶用法-SQL函数编程

引子

一般的SQL语句已经能支撑大规模的增删改查了,但有时候我们不仅要查出数据,还要对查出来的数据做进一步的加工,就像编程语言对数据的加工一样,在编程语言中,通过一系列方法,数据从入到出,变成了我们想要的模样,SQL也提供了类似的功能,唯一的区别是,SQL编程没有返回值,你可以直接对查出来的数据进行编程,结果直接展现在数据库中,这种模式叫做 PL SQL,全称Procedure Language SQL
中文:过程化SQL
如果你已有一门编程语言基础,那么以下内容将不费吹灰之力,尽数拿下

PL/SQL简单介绍

PL/SQL(Procedure Language/SQL)(过程语言/SQL)是Oracle对sql语言过程化扩展,把SQL语言的数据操纵能力与过程语言的数据能力结合起来

  • 范例:为职工涨工资,没人10%
update emp set sal=sal*1.1
  • 范例:为职工涨工资、总裁+1000、经理+800、其他人员400

–>使用pl/sql实现

PL/SQL程序语法

程序语法

declare
	说明部分(变量说明、游标申明、例外说明)
begin
	语句序列 (DML语句) ..
exception
	例外处理语句
End ;

常量和变量定义

变量的基本类型就是oracle中建表时字段的变量,如char,varchar2,date,number,boolean,long)

定义语法:

	varl char(15) ; 
	Psal number(9,2) ; 
	/*说明变量名、数据类型和长度,分号必给*/
###############################################	
	
	
	/*常量定义*/
	marrieed  boolean:=true
	##############################################


	/*引用变量*/
	Myname  emp.ename%type
	/*引用型变量Myname的类型与emp表中ename列的类型一样,在sql中使用into来赋值*/
	
	declare
	emprec emp.name%type ; 
	begin
	select t.ename into emprec from emp t where t.empno = 7369 ; 
	dbms_output.put_line(emprec) ; 
	/*输出emprec的值*/
	end ; 
	
	#############################################

/*记录型变量*/

	/*Emprec emp%rowtype*/
	/*记录变量分量(可以对应Java中的对象类型变量)的引用*/
	/*emp rec.ename:='ADAMS';*/
	declare
		p emp%rowtype;
		/*rowtype表emp中的一行当作一个类型*/
	begin
		select * into p from emp t where t.empno = 7369 ; 
		dbms_output_put_line(p.ename||''||p.sal) ; 
	/* ||表示连接 */ 
	end ; 
	
	

if分支

三种语法

  if  条件  then 语句1;
       语句2; 
       end if;
   if  条件  then  语句序列1else   语句序列 2end   if ;

if   条件  then 语句;
elseif  语句  then  语句;
else  语句;
end  if; 
  • 范例1:如果从控制台输入1则输出我是1
declare
	pnum number :=&num ; 
	/* :=& * 表示输入并赋值*/
begin
	if pnum =1 then
	dbms_output.put_line('我是1') ; 
	end if ; 
end ; 
	
  • 范例2:如果从控制台输入1则输出我是1否则输出我不是1
declare
	pnum number :=&num ; 
	/* :=& * 表示输入并赋值*/
begin
	if pnum =1 then
	dbms_output.put_line('我是1') ; 
	else
	dbms_output.put_line('我不是1') ; 
	end if ; 
end ; 
  • 范例3:判断人的不同年龄段18岁以下是未成年人,18岁以上40以下是成年人,40以上是老年人
declare
  mynum number := #
begin
  if mynum < 18 then
    dbms_output.put_line('未成年人');
  elsif mynum >= 18 and mynum < 40 then
    dbms_output.put_line('中年人');
  elsif mynum >= 40 then
    dbms_output.put_line('老年人');
  end if;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值