在PL/sql 学习当中 第3章的实例

本文介绍了PL/SQL编程的基础知识,包括如何创建不同类型的PL/SQL块,如匿名块和命名块,并通过实例展示了基本的PL/SQL语法,如变量声明、流程控制以及异常处理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建PL/SQL块的实例   编写PL/SQL程序实际就是编写PL/SQL块  记录2012-5-14 20:23

实例一:只包含执行部分的PL/SQL块

SQL> set serveroutput on;
SQL> begin
  2  dbms_output.put_line('hello,everyone!');
  3  end;
  4  /
hello,everyone!

注意,当使用dbms_output包输出数据或消息时,必须要将SQL*Plus的环境变量serveroutputs设置为on

实例二:包含定义部分和执行部分的PL/SQL块

SQL> declare v_ename varchar2(5);
  2  begin
  3    select ename into v_ename from emp
  4    where empno=&no;
  5    dbms_output.put_line('雇员名:'||v_ename);
  6    end;
  7  /
输入 no 的值:  7788
原值    4:   where empno=&no;
新值    4:   where empno=7788;
雇员名:SCOTT

PL/SQL 过程已成功完成。

为了临时存放雇员名,就必须要定义变量。在上例中,&no为SQL*Plus的替代变量

实例三:包含定义部分、执行部分和例外处理部分的PL/SQL块

   为了避免PL/SQL程序的运行错误,提高PL/SQL程序的健壮性,应该合理地处理PL/SQL程序的运行错误。

declare v_ename varchar2(5);
begin
  select ename into v_ename from emp
  where empno=&no;
  dbms_output.put_line('雇员名:'||v_ename);
exception
    when no_data_found then
      dbms_output.put_line('请输入正确的雇员号!');
end;
 
注:在存储过程中,select name into v_name from table where 条件的时候,如果没有查到数据,
就不能将V_name进行赋值,就会抛出no_data_found异常,程序不能继续执行
   
    
3.1.2 PL/SQL块分类

1.匿名块

  SQL> declare v_avgsal number(6,2);
  2  begin
  3  select avg(sal) into v_avgsal from emp
  4  where deptno=&no;
  5  dbms_output.put_line('平均工资'|| v_avgsal);
  6  end;
  7  /
输入 no 的值:  10
原值    4: where deptno=&no;
新值    4: where deptno=10;
平均工资2916.67
PL/SQL 过程已成功完成。

注:因为该PL/SQL块直接以declare开始,没有给出任何名称,所以该PL//SQL块属于匿名块。

2.命名块

  命名块是指具有特定名称标识的PL/SQL块,命名块与匿名块非常类似,只不过在PL/SQL块前使用<<>>加以标记。

3.子程序分为过程、函数、包

(1)创建函数
create function heji3(name varchar2)
return number is
salary number(7,2);
begin
select sal*12+nvl(comm,0) into salary from emp
where lower(ename)=lower(name);
end;
/

由于函数有输出参数,使用sql*plus绑定变量存放输出结果;
var income number
call heji3('scott') into :income;
print income

income
------
2400
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值