Oracle_Day10(PLSQL语法)

Oracle_Day10(PLSQL语法)

PLSQL语法

Declare
	声明部分(变量  游标)
Begin
	语句(DML DQL)
	Exception
			异常处理
End;

变量和常量的定义:

变量名 数据类型 := 默认值
数据类型:char varchar varchar2 date number Boolean long
特殊类型: 记录类型 %type %rowtype

分支结构:

If 条件 then 语句 end if;
If 条件 then 语句 else 语句 end if
If 条件 then 语句 elsif 条件 then … else 语句 end if;

Loop循环结构:

语法1:

 while  条件  loop
		End  loop;
--while  ... loop
declare
         total number := 0;
begin
  while total <= 100 loop
        dbms_output.put_line(total);
        total:= total + 1 ;
   end loop;  
end;

语法2:

Loop
	Exit[ when  条件]End loop;
declare
        step number := 1;
 begin 
   loop
     exit when step > 100;
     dbms_output.put_line(step);
     step := step  + 1;
    end loop;
  end;

语法3:

For  var  in  startend loop
End loop;
--For  var  in  start  end loop
declare
       step number := 1;
 begin
   for step in  1 .. 100   loop
       dbms_output.put_line(step);
   end loop;
 end;

游标 cursor:

查询返回多条记录的情况的处理,游标可以存储和查询返回的多条数据
语法:
Cursor 游标名[参数名1 数据类型,参数名2 数据类型…] is select 语句;
游标的使用步骤:
1 声明一个游标
2 打开游标 open 游标名(打开游标之后 就可以执行查询)
3 从游标中取一行值 fetch 游标名 into 变量
4 关闭游标 close 游标名 (释放资源)
游标的结束方式:exit when 游标名%notfound

-- 查询并输出emp表中所有员工的 编号和姓名
declare
   cursor cp  is  select * from emp;--声明一个游标
   pemp emp%rowtype;--声明一个变量 存储一条记录
begin
   --打开游标
   open cp;
        loop
           fetch cp into pemp;--从游标中取一行记录
           dbms_output.put_line(pemp.empno|| '  ' || pemp.ename);
         exit when  cp%notfound; 
        end  loop;  
   close cp;--关闭游标
end;
-- 按照员工的职位涨工资  CEO 涨1000元   manager  涨800元  其他员工涨400元
declare 
   cursor cp is  select * from  emp1;
   addsal emp1.sal%type;
   pemp emp1%rowtype;
begin
   open cp;
   loop 
      fetch cp into pemp;
      exit when cp%notfound;
     if pemp.job = 'PRESIDENT' then
       addsal := 1000;
     elsif pemp.job ='MANAGER' then
       addsal :=800;
      else 
        addsal := 400;
     end if;
     --更新薪资
     update  emp1 set sal = sal + addsal where empno= pemp.empno;
    end loop;
   close cp;
  end;
-- 编写plsql程序  为部门编号为10的员工涨工资1000
declare
   cursor cp(dno emp1.deptno%type)  is select empno from emp1 where deptno =dno;
   pno emp1.empno%type;
begin
  open cp(10);
    loop
      fetch cp into pno;
      exit when cp%notfound;
      update emp1 set sal = sal + 1000 where empno=pno;
     end loop;
   close cp;
 end;

存储过程(理解):

存储过程是在数据库系统中,一组为了完成特定功能的SQL语句集。经过编译后存储在数据库中,用户通过指定存储过程的名字并传递给相应的参数,来调用存储过程,执行并返回。

存储过程的语法:

Create [or replace ] procedure  过程名[参数名 in/out 数据类型] AS
Begin
	Plsql程序体;
End;

编写存储过程:

在这里插入图片描述

--创建一个存储过程 暑促和helloworld
create or replace procedure helloworld is
begin
   dbms_output.put_line('hello world');
end helloworld;

调用存储过程-sql窗口:

--调用执行存储过程  hellowrold
begin
  helloworld;
end;
--给指定的员工涨薪100,并打印涨薪前和涨薪后的工资
-- 由于给指定的员工涨薪  通过员工的工号 因此此时的存储过程就带有参数
create  or replace procedure addSal(eno in number) is
        pemp emp1%rowtype;
   begin
     select * into pemp from emp1 where empno=eno;
    --涨薪  更新数据
    update  emp1 set sal = sal + 100 where  empno=eno;
    dbms_output.put_line('涨薪前:' || pemp.sal || '涨薪后:' || (pemp.sal + 100));
end addSal;

注意:存储过程的参数不能使用%type类型

begin
  addsal(eno=>7902);--名称传参
  commit;
end;

传参 :

begin
  addsal(7902);--位置传参
  commit;
end;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值