(Oracle)PL SQL的相关知识与实例
PLSQL 知识
其实要写的不多,在后面的实例中都有
3种输出格式
<1>dbms_output.put(字符串表达式); 输出字符串,不换行
<2>dbms_output.put_line(字符串表达式); 输出字符串,换行
<3>dbms_output.new_line; 换行
PLSQL 实例
实例1
在emp表中查询empno=7788的雇员姓名和工资
set serveroutput on
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
select ename,sal into v_ename,v_sal from empwhere empno=7788;
dbms_output.put_line(v_ename||'****'||v_sal);
end;
实例2
变量的定义和初始化
set serveroutput on
declare
v_job varchar2(10);
v_count binary_integer default 0;
v_total_sal number(10,2) :=0;
v_date date :=sysdate;
v_tax constant number(3,2) :=5.25;
begin
v_job:='MANAGER';
dbms_output.put_line(v_job);
dbms_output.put_line(v_count);
dbms_output.put_line(v_total_sal);
dbms_output.put_line(v_date);
dbms_output.put_line(v_tax);
end;
实例3
结合变量的定义和使用
第一步
variableg_char varchar2(100) --定义结合变量g_char ,并执行
第二步
set serveroutput on
begin
:g_char:=:g_char||'Hello~'; --调用g_char时g_char前要加':'
dbms_output.put_line(:g_char);
end;
第三步
printg_char --程序结束后用print命令显示结合变量g_char的内容
实例4
记录变量的使用
在emp表中查询empno=7788的雇员姓名
set serveroutput on
declare
emp_record emp%rowtype;
begin
select * into emp_record from emp whereempno=7788;
dbms_output.put_line(emp_record.ename);
end;
实例5
TABLE变量的使用
set serveroutput on
declare
type xingqi_table is table of varchar2(10)index by binary_integer; --声明xingqi_table类型
v_xingqi xingqi_table; --定义变量v_xingqi
begin
v_xingqi(1):='MONDAY';
v_xingqi(2):='TUESDAY';
v_xingqi(3):='WEDNESDAY';
v_xingqi(4):='THURSDAY';
v_xingqi(5):='FRIDAY';
v_xingqi(6):='SATURDAY';
v_xingqi(7):='SUNDAY';
dbms_output.put_line(v_xingqi(7));
end;
实例6
if-then-end if 的用法
判断70度的水是否烧开
set serveroutput on
declare
v_temprature number(5):=70;
begin
if v_temprature<100 then
dbms_output.put_line('水还没有烧开!');
end if;
end;
实例7
if-then-else-end if 的用法
判断100度的水是否烧开
set serveroutput on
declare
v_temprature number(5):=100;
begin
if v_temprature<100 then
dbms_output.put_line('水还没有烧开!');
else
dbms_output.put_line('水开了!');
end if;
end;
实例8
if-then-elsif then-else-end if 的用法
判断薪水为7000的人的收入状况
set serveroutput on
declare
v_salary number(10);
begin
v_salary:=7000;
if v_salary<=1500 then
dbms_output.put_line('您属于低收入群体!');
elsif v_salary<10000 then
dbms_output.put_line('您属于中等收入群体!');
else
dbms_output.put_line('您属于高收入群体!');
end if;
end;
实例9
case的用法
判断80分的成绩等级
set serveroutput on
declare
v_score number(3);
begin
v_score:=80;
case
when v_score>=90 then
dbms_output.put_line('恭喜,您得了优秀!');
when v_score>=80 then
dbms_output.put_line('恭喜,您得了良好!');
when v_score>=60 then
dbms_output.put_line('您得了一般,加油奥!');
else
dbms_output.put_line('您不及格,要下工夫啊!');
end case;
end;
实例10
基本loop的用法
求 1、3、5 ……13、15的平方和
set serveroutput on
declare
v_total number(10) :=0;
v_i number(2):=1;
begin
loop
exit when v_i>15;
v_total:=v_total+v_i**2;
v_i:=v_i+2;
end loop;
dbms_output.put_line(v_total);
end;
实例11
for loop 的用法
set serveroutput on
begin
for i in 1..10
loop
dbms_output.put_line(to_char(i)||rpad('*',i,'*'));
end loop;
end;
实例12
while loop 的用法
求10!的值
set serveroutput on
declare
v_total number(10):=1;
v_i number(2):=1;
begin
while v_i<=10 loop
v_total:=v_total*v_i;
v_i:=v_i+1;
end loop;
dbms_output.put_line(v_total);
end;
实例13
双重循环
求 1!+2!+……+10!的值
set serveroutput on
declare
v_total number(10):=1;
v_i number(2):=1;
v_sum number(10):=0;
begin
for i in 1..10
loop
while v_i<=i loop
v_total:=v_total*v_i;
v_i:=v_i+1;
end loop;
v_sum:=v_sum+v_total;
end loop;
dbms_output.put_line(v_sum);
end;