Oracle练习&从键盘输入数据并输出&循环&条件&&两种case

1、简单PL/SQL块程序编写与运行,要求:接收某一姓名信息XXX,并输出显示“Hello XXX,今天是:当前日期”。

set serveroutput on
accept name1 prompt '请输入名字';
declare 
	name varchar2(10);
begin
	name:='&name';
	dbms_output.put_line('Hello'||name||',今天是:'||sysdate);
end;

在这里插入图片描述

以scott模式下的表为例或以用户自定义的表为例,举例练习PL/SQL中各种类型变量的定义和使用(包括标量变量、%type类型变量、自定义记录变量、%rowtype变量)。将所有举例的PL/SQL语句记录下来。

(1)使用标量变量。

declare
	v_name varchar2(10);
begin
	select ename into v_name from emp where empno=7369;
	dbms_output.put_line(v_name);
end;

(2)使用%type类型的变量。

declare
	v_no emp.empno%type:=666;
	v_ename emp.ename%type:='hhhh';
begin
	dbms_output.put_line(v_no);
	dbms_output.put_line(v_ename);
end;

在这里插入图片描述

(3)自定义记录变量。

declare
	type emp2 is record(
		v_no emp.empno%type,
	v_ename emp.ename%type);
	emp1 emp2;
	
begin
	select emp.empno,emp.ename into emp1.v_no,emp1.v_ename from emp where empno=7369;
	dbms_output.put_line(emp1.v_no||emp1.v_ename);
	
end;

在这里插入图片描述

(4)使用%rowtype变量。

declare
	emp1 emp%rowtype;
	
begin
	select * into emp1 from emp where empno=756;
	dbms_output.put_line(emp1.empno||emp1.ename);
	
end;

在这里插入图片描述

3、练习使用基本流程控制(循环)语句编写PL/SQL代码完成指定的数据处理功能。

(1)利用LOO循环方式计算1到100之间的偶数项之和(运行结果:2550)。

declare
	sum1 number:=0;
	T number:=0;
begin
	loop
		T := T + 2;
		
			sum1 := sum1 + T;
		
		
	exit when T=100;
	end loop;
	dbms_output.put_line(sum1);
end;

在这里插入图片描述

(2)利用WHILE循环打印出50以内所有能被3整除的整数,以及该整数的个数(运行结果:16)。

declare
	sum1 number:=0;
	T number:=1;
	
	temp number:=0;
begin
	while T<=50 loop
		select mod(T,3) into temp from dual;
		if temp=0 then
			dbms_output.put_line(T);
			sum1 := sum1 + 1;
		end if;
		T := T + 1;
	end loop;
	dbms_output.put_line(sum1);
end;

在这里插入图片描述

(3)利用FOR循环计算并输出S=1!+2!+…+10! (运行结果:4037913)

declare
 	i number:=1;
	j number:=1;
	sum1 number:=0;
	temp number:=1;
 begin
	
    		for j in 1..10 loop
			temp:= temp * j;
			sum1:=sum1 + temp;
		end loop;
		
   	 dbms_output.put_line(sum1);
 end;

在这里插入图片描述

(1)题目要求:使用临时变量(&e_no)要求用户输入雇员号,利用IF语句判断该雇员的岗位是否为’CLERK’,如果是则将该雇员的工资提高1%。


accept e_no prompt '请输入雇员号';
declare 
	v_no number;
	v_job emp.job%type:='CLERK';
	v_temp emp.job%type;
begin
	v_no := &e_no;
	select job into v_temp from emp where empno=v_no;
	if v_temp=v_job then
		update emp set sal=sal*1.01 where empno=v_no;
		dbms_output.put_line('成功!');
	end if;
	
end;

在这里插入图片描述

(2)题目要求:使用临时变量(&d_no)要求用户输入部门号,根据输入的部门号,利用使用选择器的case判断:
若是10号部门,则将该部门雇员的补助(对应EMP表中的字段COMM)改为100;若是20号部门,则将该部门雇员的补助改为80;若是30号部门,则将该部门雇员的补助改为50

accept e_no prompt '请输入部门号';
declare 
	v_no emp.deptno%type;
	v_temp emp.comm%type;
	
begin
	
	v_no := &e_no;

	update emp set comm = case v_no when 10 then 100
					when 20 then 80
					when 30 then 50
					else 0
			end  where DEPTNO=v_no;
	
	
	
end;

在这里插入图片描述

(3)题目要求:使用临时变量(&e_no)要求用户输入雇员号,根据输入的雇员号,利用不使用选择器的case判断:

若雇员工资小于1000,则将该雇员的补助(对应EMP表中的字段COMM)改为100;若雇员工资在1000到2000,则将该雇员的补助改为80;若雇员工资大于2000,则将该雇员的补助改为50

accept e_no prompt '请输入雇员号';
declare 
	v_no emp.empno%type;
	v_temp emp.comm%type;
	
begin
	v_no := &e_no;
	select comm into v_temp from emp where empno=v_no;
	

	update emp set comm = case  when v_temp<1000 then 100
					when 2000>=v_temp then 80
					else 50
			end  where DEPTNO=v_no;
	
	
	
end;

在这里插入图片描述

发布了57 篇原创文章 · 获赞 5 · 访问量 2797

猜你喜欢

转载自blog.csdn.net/qq_43520913/article/details/105564941