pl/sql过程化语言

本文介绍了PL/SQL中如何使用过程化语言调整emp表中员工的工资,如老板工资+1000,经理+800,员工+400。讨论了游标的属性如%found、%notfound、%isopen和%rowcount,并提到了系统例外情况如no_data_found、Too_many_rows等。还分享了如何设置和查看cursor的最大连接数,以及scope的不同取值含义。最后通过案例展示了工资调整的实现及异常处理。
摘要由CSDN通过智能技术生成

plsql过程化语言

--控制输出--
declare
begin
  dbms_output.put_line('hello/plsql');
end;
--变量的声明和使用--
declare
  v_num number(8):=10;
  v_num1 number(8):=20;
  v_num2 number(8);
begin
  v_num2:=v_num+v_num1;
  dbms_output.put_line('结果为:'||v_num2);
end;
--声明常量   在数据类型前面加constant--
declare
  π constant number(8,5):=3.1415;
  R number(9):=2;
  area number(10,8);
begin
  area:=π*R*R;
  dbms_output.put_line(area);
end;
--关于赋值--把emp表的7369的工资sal 赋值给v_sal--into--
declare
  v_empno number(4):=7369;
  v_sal number(7,2);
begin
  select sal into v_sal from emp where empno=v_empno;
  dbms_output.put_line(v_empno||'的工资为'||v_sal);
end;
---使用表的列类型--v_empno的类型是emp表empno字段的类型--
declare
  v_empno emp.empno%type:=7499;
  v_sal emp.sal%type;
begin
  select sal into v_sal from emp where empno=v_empno;
  dbms_output.put_line(v_empno||'的工资为'||v_sal);
end;


declare
  v_cname emp.ename%type;
  v_cjob emp.job%type;
begin
  select emp.ename,emp.job into v_cname,v_cjob from emp where emp.empno=7369;
  dbms_output.put_line(v_cname||'的工作为:'||v_cjob);
end;
--使用表的行类型--
declare
  erow emp%rowtype;
begin
  select * into erow from emp where emp.empno=7369;
  dbms_output.put_line('姓名:'||erow.ename);
  dbms_output.put_line('工作:'||erow.job);
end;


--使用分支语句
declare 
  erow emp%rowtype;
  num1 number;
begin
  select * into erow from emp where emp.empno=7369;
  select count(emp.empno) into num1 from emp where emp.empno=7369;
  if num1>0 then
    dbms_output.put_line('姓名:'||erow.ename);
    dbms_output.put_line('职位:'||erow.job);
  else
    dbms_output.put_line('没有此人');
  end if;
end;



--弹出框

accept num prompt'请输入一个数字';
declare
       pnum number:=#
begin
  if pnum=0 then dbms_output.put_line('你输入的是0');
  elsif pnum=1 then dbms_output.put_line('你输入的是1');
  else dbms_output.put_line('你输入了其他数字');
  end if;
end;


--loop循环语句--
declare
  i number;
begin
  i:=0;
  loop
    i:=i+1;
    dbms_output.put_line(i);
    exit when(i>100);
  end loop;
end;


--while循环--
declare
  i number :=1;
begin 
  while i<10 loop
    dbms_output.put_line(i);
    i:=i+1;
  end loop;
end;


--for循环--
declare
  i number:=1;
begin
  for i in 1..100 loop
    dbms_output.put_line(i);
  end loop;
end;


--for循环反序--
declare
  i number:=1;
begin
  for i in reverse 1..100 loop
    dbms_output.put_line(i);
  end loop;
end;

游标游标相当于一个集合

--打印emp的员工的工资

declare
--定游光标--
cursor cemp is select ename,sal from emp;
--为游标定义对应的变量
pname emp.ename%type;
psal emp.sal%type;
begin
  open cemp;
  --循环取出游标里的元素
  loop
    --取一条记录赋值给pname 和 psal--
    fetch cemp into pname,psal;
    exit when cemp%notfound;
    dbms_output.put_line(pname||'的工资为'||psal);
  end loop;
  close cemp;

end;

案例给emp表的老板的工资+1000 经理+800,员工+400

declare
--查询emp表的编号和工作放入游标中(相当集合)
cursor cemp is select empno,job from emp;
pempno emp.empno%type;
pjob emp.job%type;
begin
  --打开游标--
  open cemp;
  loop
    --遍历游标把empno赋值给pempno job赋值给pjob。
    fetch cemp into pempno,pjob;
    --循环的退出条件为cemp游标没有值时
    exit when cemp%notfound;
    --如果pjob为president说明就是老板
    if pjob='PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;
       --如果pjob是manager说明是经理
       elsif pjob='MANAGER' then update emp set sal=sal+800 where empno=pempno;
       --否则就是员工
       else update emp set sal=sal+400 where empno=pempno;
    end if;
  --结束循环--
  end loop;
  --关闭游标--
  close cemp;

end;

通过system用户 在SQL plus上输入 show parameter cursor 可以查看cursor的最大连接数



修改光标的最大连接数 alter system set open_cursors=400 scope=both;

scope的取值有三个 both:两个同时更改

                               memory :只更改当前事例,不更改 参数文件   

                               spfile:只更改参数文件,不更改当前事例(数据库重启服务)


set serveroutput on   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值