- 输入两个数值,输出对应的和
declare
num1 number;
num2 number;
sum1 number;
begin
num1:='&请输入第一个:';
num2:='&请输入第二个:';
sum1:=num1+num2;---->赋值的时候前面记得加冒号
dbms_output.put_line('两数之和'||sum1);--->注意PL/SQL里面是用的||来进行数字和字符串的连接,而不是+
end;
- 输入员工编号查询视图v_emp_dept表中,–(dname,ename,job,hiredate,sal)数据
这里我们需要先建立一个视图,但是我建立的时候遇到了权限不够,这里我们可以登陆DBA的账户里面采用grant dba to scott;赋予scott以DBA权限
create or replace view v_emp_dept as
select empno,ename,job,hiredate,sal,dname from emp,dept where emp.deptno=dept.deptno
这里我们在创建视图的时候添加一个or replace 就可以进行多次执行该语句
或者我们还可以通过join来进行创建
create or replace view v_emp_dept as
select empno,ename,job,hiredate,sal,dname from emp join dept on emp.deptno=dept.deptno ;
我们利用select * from v_emp_dept;对创建的视图进行查询
接下来我们就要利用PL/SQL结构对该视图进行查询
那么我们需要定义对应的 变量将所要查询的字段 赋值给对应的变量
然后输出我们定义的变量,这里我们不能够直接输出视图里面的字段,而是要输出变量
declare
e_no emp.empno%type;
d_name dept.dname%type;
e_name emp.ename%type;
e_job emp.job%type;
e_hiredate emp.hiredate%type;
e_sal emp.sal%type;
begin
e_no:='&请输入员工编号:';
--接下来将所要输出的字段赋值给我们定义的变量,使用的是select...into...的方法进行赋值
select dname,ename,job,hiredate,sal into d_name,e_name,e_job,e_hiredate,e_sal
from v_emp_dept
where e_no=empno;---->注意这里需要以分号结尾表示一个完整的select语句
并且还要记得有一个where的控制条件查询的是哪个员工的信息
dbms_output.put_line('部门名称:'||d_name||'员工姓名'||e_name||'岗位'||e_job||'入职日期'||e_sal||'薪水') ;---->字段之间的连接都要用||
end;
我们查询员工编号为7788的信息
但是这种对每一个输出的变量进行赋值的方法太麻烦了,我们可以通过整个表直接赋值,将新定义的表的类型和原来的视图的类型一致
declare
e_view v_emp_dept%rowtype;
--新定义一个视图的表,类型和原来的视图一模一样
begin
e_view.empno:='&请输入员工的编号:';
--->这里由于e_view和v_emp_dept一模一样,所以可以直接将v_emp_dept的所有字段直接赋值给新视图e_view 同样要注意where条件
select * into e_view from v_emp_dept where e_view.empno=empno;
dbms_output.put_line('部门名称:'||e_view.dname||'员工姓名'||e_view.ename||'岗位'||e_view.job||'入职日期'||e_view.hiredate||'薪水'||e_view.sal) ; ---->输出的时候实际上输出的是新视图的各个字段
end;
这里我们利用to_char 将日期的格式转换为标准的格式
to_char(e_view.hiredate,'YYYY-MM-DD')
- 分支语句
declare
score number:='&请输入成绩:';
begin
if score<60 then
dbms_output.put_line('差');
elsif score<70 then--->注意这里不是elseif而是elsif
dbms_output.put_line('中');
elsif score<80 then
dbms_output.put_line('良');
elsif score<90 then
dbms_output.put_line('优');
else dbms_output.put_line('非常优秀');
end if;----->一定注意有结束if的语句
end;
- 循环输出1…100之间的所有奇数
LP/SQL结构中有三种循环:
–循环
–loop循环(相当于do…while…=loop….exit when …..end loop;)
begin
loop
循环体
exit when 结束条件
end loop;
end;
–while loop 循环相当于while…do….=while….loop….end loop;
begin
while 条件
Loop 循环体
end loop;
end;
–for循环
begin
for i in start..end
loop
循环体
end loop;
end;
---loop循环
declare
i number(3):=1; --->loop循环有变量的的声明
begin
loop---->对于loop循环可以先写一个大概的框架,按照do...while 来写
--->loop....exit when...end loop;
---->然后里面的if语句也是同样先写好大概的框架
--->if...then....elsif...then....esle....end if;
if mod(i,2)<>0 then
dbms_output.put_line(i);
end if;
exit when i=100;
i:=i+1;
end loop;
end;
---while...loop...end loop
declare
i number(3):=1;
begin
while i<100 loop --->注意这里的while后面的条件后面没有分号
--->相当于while() do....最好这里while...loop写在同一行
if mod(i,2)<>0 then
dbms_output.put_line(i);
end if;
i:=i+1;
end loop;
end;
--for循环
begin
for i in 1..100 loop--->这里的loop也是写在for同一行
if mod(i,2)<>0 then
dbms_output.put_line(i);
end if;
--i:=i+1;-----》一定要注意for循环本身就有迭代器,所以不需要再进行i:=i+1的迭代了
end loop;
end;