PL

1使用PL/SQL块查询表的信息

(1)查询编号为7369的员工名称和职务信息。

set serveroutput on

desc emp

declare v_ename varchar2(10);

  v_job varchar2(9);

  begin

   select ename,job into v_ename,v_job from emp where empno=&empno;

   dbms_output.put_line(v_ename||','||v_job);

   end;

   /

Enter value for empno: 7369

old   4: select ename,job into v_ename,v_job from emp where empno=&empno;

new   4: select ename,job into v_ename,v_job from emp where empno=7369;

SMITH,CLERK

 

(2)使用%type类型的变量输出表中编号为7369的员工名称和职务信息。

declare v_ename emp.ename %type;

v_job emp.job %type;

begin

select ename,job into v_ename ,v_job from emp where empno=&empno;

dbms_output.put_line(v_ename||','||v_job);

end;

/

Enter value for empno: 7369

old   4: select ename,job into v_ename,v_job from emp where empno=&empno;

new   4: select ename,job into v_ename,v_job from emp where empno=7369;

SMITH,CLERK

 

(3)声明一个记录类型emp_type,使用该类型的变量存储emp表中的一条记录信息并输出这条记录。

declare type emp_type is record(v_ename emp.ename %type,v_job emp.job %type,v_mgr emp.mgr %type,v_hiredate emp.hiredate %type);

  v_emp_record emp_type;

  begin

  select ename,job,mgr,hiredate into v_emp_record from emp where empno=&empno; dbms_output.put_line(v_emp_record.v_ename||','||v_emp_record.v_job||','||v_emp_record.v_mgr||','||v_emp_record.v_hiredate);

  end;

  7  /

Enter value for empno: 7369

old   4: select ename,job,mgr,hiredate into v_emp_record from emp where empno=&empno;

new   4: select ename,job,mgr,hiredate into v_emp_record from emp where empno=7369;

SMITH,CLERK,7902,17-DEC-80

 

(4)声明一个%rowtype类型的变量rowVar_emp,使用该变量存储emp表中的一行数据。

declare rowVar_emp emp %rowtype;

begin

select * into rowVar_emp from emp where empno=&empno;

dbms_output.put_line(rowVar_emp.ename||rowVar_emp.job||rowVar_emp.mgr||rowVar_emp.hiredate);

end;

/

 

2设计条件控制语句来实现表中分支情况的查询

(1)根据条件控制结构实现以下功能:如果表中存在职务为“ANALYST”或“PRESIDENT”的员工,那么输出“有满足条件的员工”信息,否则输出“没有满足条件的员工”。

declare v_num number(2);

begin

select count(*) into v_num from scott.emp where job='ANALYST' or job='PRESIDENT';

if v_num!=0 then

dbms_output.put_line('employee');

else

dbms_output.put_line('noemployee');

end if;

end;

   (2)编程实现以下功能:使用CASE语句更新相应部门的员工补贴,部门10补贴100,部门20补贴80,部门30补贴80,部门40补贴60。

declare v_deptno emp.deptno %type;

begin

case

when v_deptno=10 then

update emp set comm= nvl(comm,0)+100;

when v_deptno=20 then

update emp set comm= nvl(comm,0)+80;

when v_deptno=30 then

update emp set comm= nvl(comm,0)+80;

else

update emp set comm= nvl(comm,0)+60;

end case;

end;

/

 

declare cursor crs_commupdate is select * from emp for update of comm;

r_commupdatet crs_commupdate %rowtype;

updatecomm emp.comm %type;

begin

for r_commupdatet in crs_commupdate loop

case

when r_commupdatet.deptno=10

then updatecomm:=nvl(r_commupdatet.comm,0)+100;

when r_commupdatet.deptno=20

then updatecomm:=nvl(r_commupdatet.comm,0)+80;

when r_commupdatet.deptno=30

then updatecomm:=nvl(r_commupdatet.comm,0)+80;

when r_commupdatet.deptno=40

then updatecomm:=nvl(r_commupdatet.comm,0)+60;

end case;

update emp  set comm=updatecomm where current of crs_commupdate;

end loop;

end;

/

 

3 设计循环语句连续向表中插入多条记录

分别使用三种不同的循环while loop循环,基本loop循环,for loop循环实现连续向emp表中插入10个记录。

declare v_count number(2):=1;

begin

while v_count<=10 loop

insert into scott.emp(empno) values(v_count);

v_count:=v_count+1;

end loop;

commit;

end;

/

 

declare v_count number(2):=1;

begin

loop

insert into scott.emp(empno) values(v_count);

exit when v_count=10;

v_count:=v_count+1;

end loop;

commit;

end;

/

 

begin

for v_count in 1..10

loop

insert into scott.emp(empno) values(v_count);

end loop;

commit;

end;

/

posted @ 2019-06-27 08:33  你难忘的  阅读(1203)  评论(0编辑  收藏  举报