oracle中使⽤plsql代码块
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,
pno%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||'总数'||pno);
end;
3、编写⼀个PL/SQL块,输出所有员⼯的员⼯姓名、员⼯号、⼯资和部门号
declare
--定义记录类型
type emp_record_type is record(
ame%type,
pno%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 pno, 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('员⼯编号'||pno ||'员⼯姓名 '||ame ||' 基本⼯资'||v_count.sal ||'部门编号 '||v_count.deptno);
end loop ;
end;
5、编写⼀个PL/SQL块,输出所有员⼯及其部门领导的姓名、员⼯号及部门号。
declare
v_emp  emp%rowtype;
cursor a is ame,a.ame mname from emp a inner join emp m ;
begin
for v_emp in a
loop
dbms_output.put_line('员⼯编号:'||pno||'员⼯姓名:'||ame||'部门编号:'||v_emp.deptno||' 领导姓名 '||ame);
end loop;
plsql配置oracle主目录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('⼯号:'||pno||',姓名:'||ame||',⼯资:'||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('⼯号:'||pno||',姓名:'||ame||',⼯资:'||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.计算⼀百以内的素数
declare
fig boolean;
begin
--循环100以内的数
for i in2..100
loop
--  判断是否是素数,条件满⾜
fig:=true;
for unc(i/2)
loop
if(mod(i,j)=0)then
fig:=false;
exit;
end if;
end loop;
--最后输出判断,如果fig为true。则该⾃然数是素数,则输出if fig then
dbms_output.put_line(i);
end if;
end loop;
end;
9、输出100以内的⾃然数
-
-使⽤loop循环输出⼀百以内的⾃然数
declare
v_i number(8):=1;
begin
loop
dbms_output.put_line(v_i);
if v_i>=100then
exit;
end if;
v_i:=v_i+1;
end loop;
end;
--使⽤while循环输出⼀百以内的⾃然数
declare
V_i number(8):=1;
begin
while v_i<=100
loop
dbms_output.put_line(v_i);
v_i:=v_i+1;
end loop;
end;
declare
--使⽤for循环输出⼀百以内的⾃然数
begin
for v_i in1..100
loop
dbms_output.put_line(v_i);
end loop;
end;
declare
v_emp emp_table%type;
begin
select*bulk collect into v_emp from emp;
for v_i in v_emp.first .. v_enmp.last
loop
dbms_output.put_line('员⼯编号'||v_emp(v_i),empno);
end loop;
end;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。