Oracle学习笔记(2) PLSQL编程基础

本文是Oracle学习笔记的第二章,主要介绍了PL/SQL编程基础,包括变量声明、记录类型和集合类型的使用,以及异常处理。通过实例展示了如何操作数据库表,如 Employee,并讲解了如何使用PL/SQL Developer进行编程。
摘要由CSDN通过智能技术生成

这是第二章的学习笔记,学习完第一章的基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊! 
    编程时使用的工具是PLSQL Developer 7.1.4

Sql代码 
  1. select * from Employee;  
  2. select * from dba_tab_cols t where t.table_name='EMPLOYEE';  

 

Sql代码 
  1. -- 声明部分,用于定义变量  
  2. declare  


constant用于定义常量,当定义常量时必须指定它的初始值,且数据不能改变 

Sql代码 
  1. n_aaa constant number(4,2) :=5.5;  


boolean 类型的值只能用于sqlplus语句块中,不能用在表字段的数据类型中 
not null 用于强制初始化变量不能为空,此时必须为变量指定值 
default用于指定变量或常量的默认值 

Sql代码 
  1. v_valid boolean not null default false;  
  2. v_name varchar2(20);  


为了确保变量使用合适的数据类型和长度,可以使用%type属性定义变量,它会按照数据库列 
或其它变量来确定新变量的类型和长度 

Sql代码 
  1. v_job Employee.Job%type;  


将v_job2定义为与变量v_job的数据类型和长度完全一致 

Sql代码 
  1. v_job2 v_job%type;  


复合变量: 
处理单行单列数据时,用标量变量;处理单行多列时,用PL/SQL记录;处理单列多行时, 
用集合;处理多行多列数据时,可以结合使用PL/SQL记录和集合 
PL/SQL记录(RECORD): 
       方法一: 
       emp_recode_type 是PL/SQL记录类型并包含有三个成员(name,salary,job) 

Sql代码 
  1. type emp_recode_type is record(  
  2.             name employee.name%type,  
  3.             salary employee.salary%type,  
  4.             job employee.job%type  
  5. );  


emp_recode是记录变量 

Sql代码 
  1. emp_recode emp_recode_type;  


方法二: 
       使用表名的%rowtype 属性定义记录变量 
       注意:用%rowtype 属性定义记录变量时,记录成员个数、名称、类型必须与 
       表或视图的列的个数、名称和类型完全相同 

Sql代码 
  1. emp_recode2 employee%rowtype;  


集合类型 
       PL/SQL 表(也称索引表,下标可以为负数,下标没有上限和下限,并且元素的个数无限) 

Sql代码 
  1. --这里的table 实指集合  
  2. type name_table_type is table of employee.name%type index by binary_integer;  
  3.        name_table name_table_type;  


嵌套表:       
     嵌套表的下标不能为负值,其元素的个数没有限制并可以使用表列的数据类型 
      在使用嵌套表时必须先用create type 语句建立嵌套表类型 
      嵌套表只是比PL/SQL 表少了 index by binary_integer 

Sql代码 
  1. type num_table_type is table of number(4);  
  2. num_table num_table_type;   


varray(变长数组): 
        varray的元素个数是有限制的,在使用其之前必须先建立varray类型 
         在此创建的varray只能存放20个varchar2类型的数据 
         注意:嵌套表列数据需要存储在专门的存储表中,而varray数据则与 
         其它列数据一起存放在表字段中 

Sql代码 
  1. type v_varray_type is varray(20) of varchar2(10);  
  2. n_empno employee.empno%type;  

 

Sql代码 
  1. -- 程序开始  
  2. begin  



执行部分,执行PL/SQL/和SQL语句 
可以用into将从表人查询出来的值赋给指定的变量 
将值赋给变量有两种方法,一是用 := ,二是用 into 
& 符号用于提示用户输入一个值,& 为sqlplus的替代变量 

Sql代码 
  1. n_empno := &输入你要查询的员工编号:;  
  2. select Name,Job into v_name,v_job from Employee where empno=n_empno;  


这里的 || 号与Java中的 + 号类似,表示要将两边的字符串连接起来 
dbms_output是Oracle所提供的系统包,用于输出数据或消息, 
而put_line是该包所包含的过程,用于输出字符串信息并换行 
当在CMD中使用dbms_output包时,必须要先将sqlplus 的环境变量 
serveroutput 设置为 on 

Sql代码 
  1. dbms_output.put_line('你查询的员工是:' || v_name || '  他的工作是:' || v_job);  


引用记录变量的成员并赋值(赋值可以用 := 和 into 两种方法) 
注意:用select……into 语句给记录变量赋值时,select语句中的列名列表的名称和个数、 
类型必须与记录变量的成员个数、名称、类型完全相同 

Sql代码 
  1. dbms_output.put_line('你查询的员工是:' || v_name || '  他的工作是:' || v_job);  
  2.   
  3. emp_recode.name := '钱森';  
  4.        dbms_output.put_line('引用记录变量的成员并赋值(Recode):' || emp_recode.name);  
  5.          
  6.        select name,job into emp_recode2.name,emp_recode2.job from employee where empno=2;  
  7.        dbms_output.put_line('引用记录变量的成员并赋值(RowType):' || emp_recode2.name || ' 的工作是:' || emp_recode2.job);  
  8.        -- 使用PL/SQL表(索引表)  
  9.        select name into name_table(-50) from employee where empno=1;  
  10.        dbms_output.put_line('雇员名:' || name_table(-50));  
  11.        -- 使用嵌套表  
  12.        -- 必须先设置嵌套表的下标,然后才能对该集合进行赋值  
  13.        num_table := num_table_type(1,2,3,4,5);  
  14.        num_table(1) := 10;  
  15.        num_table(5) := 100;  
  16.        dbms_output.put_line('使用嵌套表:' || num_table(1) || ',' || num_table(5));  
  17.   
  18. exception  
  19.    -- 异常处理部分  
  20.    when NO_DATA_FOUND then dbms_output.put_line('查询不到员工编号为' || n_empno || '的员工!');  
  21.    when TOO_MANY_ROWS then dbms_output.put_line('数据完整性错误,员工编号' || n_empno || '重复!');  
  22.    when OTHERS then dbms_output.put_line('PL/SQL执行错误!' || sqlerrm);  
  23. -- 程序结束  
  24. end;  
  25. /  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值