pl/sql语句块

-- 五、pl/sql语句块
/* 
1.格式
[declare
变量名 类型;
.....]
begin
 语句块
 [exception 异常处理]
end; */
-- 例如:
BEGIN
dbms_output.put_line('hello');
END;
DECLARE
n NUMBER ;
s NUMBER DEFAULT 1;
i NUMBER;
BEGIN
n:=&输入一个正整数;
FOR i IN REVERSE 1..n
LOOP
s:= s*i;
END LOOP;
dbms_output.put_line(s);
END;
DECLARE
num NUMBER;
sname VARCHAR2(20);
BEGIN
num:=1001;
sname:='&姓名';
dbms_output.put_line('编号:'||num||'姓名:'||sname);
END;

DECLARE
salary NUMBER;
BEGIN
SELECT AVG(sal) INTO salary FROM emp;
dbms_output.put_line('平均工资:'||salary);
END;
DECLARE
num NUMBER DEFAULT 100;
BEGIN
dbms_output.put_line(num);
END;

-- 2、声明全局变量
/* 
declare
变量名1 类型1 [default 初始值];
变量名2 类型2 [:=初始值];
.....
1)赋初值两种方式default或:=
2)赋值方式::=或select ...into ...
3)动态输值
数值类型 :=&提示 或字符、日期类型 :='&提示' */
DECLARE
text VARCHAR2(50);
numNUMBER;
BEGIN
text:='这是一个文本';
text:='&输入一个字符串';
dbms_output.put_line(text);
SELECT COUNT(empno) INTO num FROM emp;
dbms_output.put_line(num);
END;

-- 3、注释
--单行注释
-- /**/:多行注释

-- 4、类型
-- 1)%type:字段类型
-- 显示编号为7369的员工姓名
DECLARE
xm emp.ename%type;
BEGIN
SELECT ename INTO xm FROM emp WHERE empno=7369;
dbms_output.put_line(xm);
END;

-- 2)%rowtype:表的行类型
-- 取出7369这名员工的所有信息
DECLARE
jr emp%rowtype;
BEGIN
SELECT * INTO jr FROM emp WHERE empno=7369;
dbms_output.put_line(jr.ename);
dbms_output.put_line(jr.hiredate);
dbms_output.put_line(jr.sal);
dbms_output.put_line(jr.deptno);
END;

-- 5、分支语句
/* 
1)单分支if语句
if条件then
begin
语句;
end;
end if; */
-- 求一个数的绝对值
DECLARE
n NUMBER;
BEGIN
n:=&输入一个整数;
IF n<0 THEN
n:=-n;
END IF;
dbms_output.put_line('绝对值为:'||n);
END;

/* 
2)双分支if
if 条件 then
begin
语句块1;
end;
else
begin
语句块2;
end;
end if; */
-- 判断一个年份是闰年还是平年
DECLARE
y NUMBER;
BEGIN
y:=&输入一个年份;
IF (mod(y,400)=0) OR (mod(y,4)=0) AND (mod(y,100)!=0) THEN
dbms_output.put_line('闰年');
ELSE
dbms_output.put_line('平年');
END IF;
END;

/* 
3)多分支if
if 条件1 then
begin
语句块1;
end;
else if 条件2 then
begin
语句块2;
end;
else
begin
语句块3;
end;
end if;
end if; */
-- 判断一个成绩优良中差
DECLARE
score NUMBER;
BEGIN
score :=&输入一个成绩;
IF score>=90 THEN
dbms_output.put_line('优秀');
ELSE
IF score>=80 THEN
dbms_output.put_line('良好');
ELSE
IF score>=60 THEN
dbms_output.put_line('中等');
ELSE
dbms_output.put_line('不及格');
END IF;
END IF;
END IF;
END;

-- 6、循环语句
/* 1)无条件的循环语句
loop
 循环体
	exit when 条件;
end loop; */
-- 求n的阶乘
DECLARE
n NUMBER ;
s NUMBER DEFAULT 1;
BEGIN
n:=&输入一个正整数;
LOOP
s:= s*n;
n:=n -1;
/*if n<=1 then
exit;
end if;*/
EXIT
WHEN n<=1;
END LOOP;
dbms_output.put_line(s);
END;

/* 2)while循环
while 条件
loop
循环体
end loop; */
DECLARE
n NUMBER ;
s NUMBER DEFAULT 1;
BEGIN
n :=&输入一个正整数;
WHILE n>1
LOOP
s:= s*n;
n:=n -1;
END LOOP;
dbms_output.put_line(s);
END;

/* 3)for in 循环
for 变量in 起点..终点
loop
循环体
end loop;
%type:字段类型 %rowtype:行类型 显示指定部门的平均工资 */
DECLARE
dno emp.deptno%type;
avgSal NUMBER;
BEGIN
dno:=&部门编号;
SELECT AVG(sal) INTO avgSal FROM emp WHERE deptno=dno;
dbms_output.put_line('部门:'||dno||'平均工资:'||avgSal);
END;

-- 显示指定编号的员工信息
DECLARE
eno emp.empno%type;
jr emp%rowtype;
BEGIN
eno:=&员工编号;
SELECT * INTO jr FROM emp WHERE empno=eno;
dbms_output.put_line(jr.empno||jr.ename||jr.sal);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('没有发现您要找的数据');
WHEN OTHERS THEN
dbms_output.put_line('其他异常');
END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值