`

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

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

select * from Employee;
select * from dba_tab_cols t where t.table_name='EMPLOYEE';

-- 声明部分,用于定义变量
declare

constant用于定义常量,当定义常量时必须指定它的初始值,且数据不能改变
n_aaa constant number(4,2) :=5.5;

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

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

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

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

emp_recode是记录变量
emp_recode emp_recode_type;

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

集合类型
       PL/SQL 表(也称索引表,下标可以为负数,下标没有上限和下限,并且元素的个数无限)
--这里的table 实指集合
type name_table_type is table of employee.name%type index by binary_integer;
       name_table name_table_type;

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

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

-- 程序开始
begin


执行部分,执行PL/SQL/和SQL语句
可以用into将从表人查询出来的值赋给指定的变量
将值赋给变量有两种方法,一是用 := ,二是用 into
& 符号用于提示用户输入一个值,& 为sqlplus的替代变量
n_empno := &输入你要查询的员工编号:;
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
dbms_output.put_line('你查询的员工是:' || v_name || '  他的工作是:' || v_job);

引用记录变量的成员并赋值(赋值可以用 := 和 into 两种方法)
注意:用select……into 语句给记录变量赋值时,select语句中的列名列表的名称和个数、
类型必须与记录变量的成员个数、名称、类型完全相同
dbms_output.put_line('你查询的员工是:' || v_name || '  他的工作是:' || v_job);

emp_recode.name := '钱森';
       dbms_output.put_line('引用记录变量的成员并赋值(Recode):' || emp_recode.name);
       
       select name,job into emp_recode2.name,emp_recode2.job from employee where empno=2;
       dbms_output.put_line('引用记录变量的成员并赋值(RowType):' || emp_recode2.name || ' 的工作是:' || emp_recode2.job);
       -- 使用PL/SQL表(索引表)
       select name into name_table(-50) from employee where empno=1;
       dbms_output.put_line('雇员名:' || name_table(-50));
       -- 使用嵌套表
       -- 必须先设置嵌套表的下标,然后才能对该集合进行赋值
       num_table := num_table_type(1,2,3,4,5);
       num_table(1) := 10;
       num_table(5) := 100;
       dbms_output.put_line('使用嵌套表:' || num_table(1) || ',' || num_table(5));

exception
   -- 异常处理部分
   when NO_DATA_FOUND then dbms_output.put_line('查询不到员工编号为' || n_empno || '的员工!');
   when TOO_MANY_ROWS then dbms_output.put_line('数据完整性错误,员工编号' || n_empno || '重复!');
   when OTHERS then dbms_output.put_line('PL/SQL执行错误!' || sqlerrm);
-- 程序结束
end;
/









10
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics