oracle 中代码块,oracle 中使用 pl/sql代码块

1、写匿名块,输入三角形三个表的长度。在控制台打印三角形的面积。

declare

-- (p=(a+b+c)/2)

--声明三角形的面积 三条边 的

v_a number (10,2):=&no1;

v_b number (10,2):=&no2;

v_c number (10,2):=&no3;

v_p number (10,2);

begin

v_p:=1/4*sqrt((v_a+v_b+v_c)*(v_a+v_b-v_c)*(v_a+v_c-v_b)*(v_b+v_c-v_a));

--打印输出

dbms_output.put_line('三角形面积是:'||v_p);

end;

2、输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

declare

--声明部门编号

type emp_record_type is record(

dname dept.dname%type,

empno emp.empno%type,

sal emp.sal%type

);

v_emp emp_record_type;

v_depton emp.deptno%type;

v_avg emp.sal%type;

v_count number(8,2);

begin

--查询这个部门的总人数 计算出 这个部门的平均工资 平均工资是(基本工资+奖金)

select dname,count(*),avg(sal+nvl(comm,0))into v_emp from emp e inner join dept d on e.deptno=d.deptno where e.deptno=&no group by e.deptno,dname;

--打印输出

dbms_output.put_line('部门名称:'||v_emp.dname||',平均工资'||v_emp.sal||'总数'||v_emp.empno);

end;

3、编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号

declare

--定义记录类型

type emp_record_type is record(

ename emp.ename%type,

empno emp.empno%type,

sal emp.sal%type,

deptno emp.deptno%type

);

type emp_table_type is table of emp_record_type index by binary_integer;

--定义表变量

v_emp emp_table_type;

--定义循环变量

v_num number(8);

begin

select count(empno) into v_num from emp;

for i in 1 .. v_num

loop

select ename,empno,sal,deptno into v_emp(i) from (select e.*,rownum r from emp e where rownum<=14) where r=i;

end loop;

for i in 1 .. v_num

loop

dbms_output.put_line('员工姓名:'||v_emp(i).ename||',员工号:'||v_emp(i).empno||',工资:'||v_emp(i).sal||'部门号:'||v_emp(i).deptno);

end loop;

end;

4,编写一个PL/SQL块,输出所有比本部门平均工资高的员工信息。

declare

v_sal emp.sal%type;

--在控制台输入部门编号

v_deptno emp.deptno%type :=&no;

--查询所有比本部门平均工资高的员工信息

cursor query_info is select e.empno, e.ename,e.sal,e.deptno

from emp e where sal>(

select avg(sal+nvl(comm,0)) from emp where deptno=v_deptno);

sal emp.sal%TYPE;

empno dbms_sql.Number_Table;

ename dbms_sql.Varchar2_Table;

deptno dbms_sql.Number_Table;

begin

--遍历打印

for v_count in query_info loop

dbms_output.put_line('员工编号'||v_count.empno ||'员工姓名 '||v_count.ename ||' 基本工资'||v_count.sal ||'部门编号 '||v_count.deptno);

end loop ;

end;

5、编写一个PL/SQL块,输出所有员工及其部门领导的姓名、员工号及部门号。

declare

v_emp emp%rowtype;

cursor a is select a.empno,a.ename,a.deptno,m.ename mname from emp a inner join emp m on a.empno=m.mgr;

begin

for v_emp in a

loop

dbms_output.put_line('员工编号:'||v_emp.empno||'员工姓名:'||v_emp.ename||'部门编号:'||v_emp.deptno||' 领导姓名 '||v_emp.mname);

end loop;

end;

6,查询姓为“SMITH”的员工信息,并输出其员工号、姓名、工资、部门号。如果该员工不存在,则插入一条新记录,员工号为2012,员工姓名为“Smith”,工资为7500元,入职日期为“2002年3月5日”,部门号为50。如果存在多个名“Smith”的员工,则输出所有名为“Smith”的员工号、姓名、工资、入职日期、部门号L。

declare

v_emp emp%rowtype;

begin

select * into v_emp from emp where ename='Smith';

dbms_output.put_line('工号:'||v_emp.empno||',姓名:'||v_emp.ename||',工资:'||v_emp.sal||',部门号:'||v_emp.deptno);

exception

when no_data_found then

insert into emp(empno,ename,sal,deptno) values(2016,'Smith',7500,50);

commit;

when too_many_rows then

for v_emp in (select * from emp where ename='Smith') loop

dbms_output.put_line('工号:'||v_emp.empno||',姓名:'||v_emp.ename||',工资:'||v_emp.sal||',部门号:'||v_emp.deptno);

end loop;

end;

7、输入员工编号,根据员工的入职时间修改发放奖金类,大于等于6年的奖金为2000,小于6年的奖金是1500

begin

select hiredate into v_hiredate from emp where empno=&no1;

if(sysdate-v_hiredate)>365*6 then

v_comm:=2000;

else

v_comm:=1500;

end if;

update emp set comm=v_comm where empno=&no;

if(sql%rowcount>0)then

dbms_output.put_line('修改成功');

else

dbms_output.put_line('修改失败');

end if;

end;

8.计算一百以内的素数

declarefig boolean;begin

--循环100以内的数

for i in 2..100loop--判断是否是素数,条件满足

fig:=true;for j in 2..trunc(i/2)

loopif(mod(i,j)=0)thenfig:=false;exit;end if;endloop;--最后输出判断,如果fig为true。则该自然数是素数,则输出

if fig thendbms_output.put_line(i);end if;endloop;end;

9、输出100以内的自然数

--使用loop循环输出一百以内的自然数

declarev_inumber(8):=1;beginloop

dbms_output.put_line(v_i);if v_i>=100 then

exit;end if;

v_i:=v_i+1;endloop;end;--使用while循环输出一百以内的自然数

declareV_inumber(8):=1;begin

while v_i<=100loop

dbms_output.put_line(v_i);

v_i:=v_i+1;endloop;end;declare

--使用for循环输出一百以内的自然数

begin

for v_i in 1..100loop

dbms_output.put_line(v_i);endloop;end;declarev_emp emp_table%type;begin

select * bulk collect into v_emp fromemp;for v_i inv_emp.first .. v_enmp.last

loop

dbms_output.put_line('员工编号'||v_emp(v_i),empno);endloop;end;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值