第七章 : plsql编程基础 (变量&循环&标签)


- -plsql编程基础
- -变量的声明和使用
- - 1、任何变量在使用前必须现在 declare部分声明,然后才能使用;
- - 2、如果不给变量明确地赋值(初始化),那么变量自动
- -得到 null值,不管变量是什么类型
- - 3、声明变量时必须指定数据类型,这样plsql才知道
- -该变量占据多少存储空间以及可以参与什么运算。

- -以下代码,会在屏幕上输出字面量 'born on':
declare
  v_name varchar2( 20);
  v_dob date;
  v_us_citizen boolean;
begin
  dbms_output.put_line(v_name|| ' born on '||v_dob);
end;

- -当 v _name和v_dob变量值为 null时,
- -希望分别输出’ No Name‘和 '01-Jan-1999' ,可以怎么做 ?
declare
  v_name varchar2( 20);
  v_dob date;
  v_us_citizen boolean;
begin
  dbms_output.put_line(nvl(v_name, 'No Name')||
     ' born on '||nvl(v_dob,to_date( '1999-01-01', 'YYYY-MM-DD')));
end;

- -给变量赋值有 2个要点
- - 1、数据类型要一致
- - 2、数据大小要匹配


- -使用% type属性指定变量的数据类型。提倡尽可能使用
- -语法 :变量名  表名.列名% type;
- -含义:指定变量的数据类型和某个表的某个列的类型一模一样。

- -什么时候用?
- -如果你什么变量想用来保存某些列的值( select   into
- -或者想用来给某些列赋值( insert或者 update),就可以使用

declare
  v_name student.first_name% type;
  v_grade grade.numeric_grade% type;
begin
  dbms_output.put_line(v_name|| ' 有成绩 '||v_grade);
end;


- -标签
- -语法: < <标签名 > >
- -标签可以添加到语句块,以改进代码的可读性。这是他的
- -第一个作用。
- -标签必须在可执行代码第 1行(或者 BEGIN或者 DECLARE)的前面
< <find_stu_num > >
begin
  dbms_output.put_line( '过程find_stu_num已经执行');
end  find_stu_num;

- -注意:第一行是标签的plsql代码不能在命令窗口执行,
- -可以在sqlplus中或者测试窗口中执行


- -嵌套语句块
- -嵌套语句块是完全位于其它语句块中的语句块,例如:
BEGIN        - - outer block 
       BEGIN       - - inner block 
              ……
       END;         - - end of inner block
  END;        - - end of outer block 

- -嵌套语句块会对变量的作用域带来影响

- -变量的作用域:
- -变量的作用域是可以访问变量或者变量可见的程序块范围。

- -通常,变量的作用域就是声明该变量的当前语句块。

- -在外部块中声明的变量其作用域就是整个外
- -部块(从 BEGIN开始一直到 END),在嵌套块中声明的变量
- -其作用域就是整个嵌套块(从 BEGIN开始一直到 END)。

- -嵌套块可以直接访问外部块中声明的变量。但是当在
- -嵌套块中声明了一个和外部块中同名的变量时,嵌套块
- -就不能直接访问外部块中的同名变量了,因为这时它
- -看不见外部块中的同名变量。

- -只能通过标签名来引用外部同名变量。这是标签的第二个作用。

< <outer_block > >
declare
  v_test binary_integer : = 123;
begin
  dbms_output.put_line( '在外部块中,v_test='||v_test);
   < <inner_block > >
   declare
    v_test binary_integer : = 456;
   begin
    dbms_output.put_line( '在内部块中,v_test='||v_test); 
    dbms_output.put_line( '在内部块中,外部块v_test='||
      outer_block.v_test);
   end inner_block;     
end outer_block;


- -在plsql中使用 sql
- -主要观察 sql语句的一些变化。

- - 1select语句的变化:带 into子句,用来给变量赋值。
- -值来自于表的某些列。另外一种变量赋值的方式是使用: =操作符

- -示例 1:将COURSE表中所有课程的平均费用赋给一个变量
declare
  avg_cost varchar2( 12);
begin
   - -查询平均费用,保存到avg_cost中
   select to_char( avg(cost), '$99,999.99')
     into avg_cost
     from course;

  dbms_output.put_line( '课程的平均费用是:'||avg_cost);  
end;


- - 2、dml语句的变化:语句中带有变量
- -示例 2:使用变量值更新ZIPCODE邮编表中已有的行
declare
  v_city zipcode.city% type;
begin
   - -变量初始化:注意如何使用 select   into的语法将字面量
   - -付给一个变量
   select   'COLUMBUS'
     into v_city
     from dual;

   - -更新邮编 43224  
   update zipcode
     set city = v_city
     where zip = 43224;    

  dbms_output.put_line( '更新成功');
end;

- -示例 3:使用变量值向ZIPCODE邮编表中插入行
declare
  v_zip zipcode.zip% type;
  v_user zipcode.created_by% type;
  v_date zipcode.created_date% type;
begin
   - -变量初始化
   select '43438', user,sysdate
    
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值