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;
/