关于 plsql 的总结 (一)

来源:互联网 发布:手机dlna软件 编辑:程序博客网 时间:2024/06/07 14:49

今天听老师讲了一天的plsql 下面是我自己的一些理解和总结,希望能帮助到一起学习的朋友们。

我用的是oracle。

1. plsql的程序结构
   
declare 
/* 申明区  ->   用来定义变量 类型 异常等 */
begin
  /* 执行区   ->  用来执行sql语句 或者plsql语句 */
exception
/* 异常处理区  ->  用于处理异常 */
end;


2.简单的 plsql程序

打开输出 
set serveroutput on
begin
dbms_output.put_line ('hello plsql !');      /* 输出语句 */
end;
/


3.plsql 中的变量定义    (让我想到数据库中变量的定义)

declare
/* 定义变量 */
var_num number;
var_name varchar(25);
begin
/* 给变量赋值 注意冒号 */
var_num:=100;
var_name:='Erick';
dbms_output.put_line (var_num||':'||var_name);
end;
/
当然在定义的同时可以初始化
declare
/* 定义变量 并初始化 */
var_num number:=100;
var_name varchar(25):='Erick';

4.变量的修饰
constant -> const

not null -> 定义同时赋初值


变量的类型:
 
1.标量类型
number 
char
varchar
date

boolean (true  false  NULL)
binary_integer


2.替代的语法:
定义两个标量 分别和s_emp表的id,first_name 的类型保持一致,然后把id=1的值赋给这两个变量。
declare 
var_id number(7);
var_name varchar(25);
begin
var_id:=1;
var_name:='Erick';
dbms_output.put_line (var_id||':'||var_name);
end;
/
  
替代 赋值  into 
declare
var_id number(7);
var_name varchar(25);
begin
select id,first_name into var_id,var_name from s_emp where id=1;
dbms_output.put_line (var_id||':'||var_name);
end;
/

替代类型 可以得到表的一个字段对应的类型
表名.字段名%type
declare
var_id s_emp.id%type;
var_name s_emp.first_name%type;
begin
select id,first_name into var_id,var_name from s_emp where id=1;
dbms_output.put_line (var_id||':'||var_name);
end;
/


3.plsql中的记录类型 record

declare
/* 定义一个记录类型 注意不是分隔类型 */
type emptype is record (
var_id s_emp.id%type,
var_name s_emp.first_name%type,
var_salary s_emp.salary%type
);
/* 使用类型定义变量 */
var_emp emptype;
begin
select id,first_name,salary  into var_emp from s_emp where id=1;
dbms_output.put_line (var_emp.var_id
||':'||var_emp.var_name||':'||var_emp.var_salary);  
end;
/

记录类型:
  如何定义记录类型 ?
type  类型名  is  record (
      字段名    类型,
      字段名    类型,
      字段名    类型 
);
使用记录类型定义变量
变量名 类型名

4.表名%rowtype 得到表的一行对应的类型

declare
var_emp s_emp%rowtype;
begin
select id,name,salary into var_emp from s_emp where id=1;
dbms_purput.put_line (var_emp.id||':'||var_emp.first_name||':'||var_emp.salary);
end;
/

使用%rowtype 类型 就是得到表的一行对应的记录类型
    字段名字 和 字段顺序和 desc 表名出来的顺序和名字
    完全一致.就是一个字段 名字和顺序 和表头完全一致的
    record类型


map

table 类型名 is table of 表中的类型 index by binary_integer;

注:表中元素的类型可以是number varchar record类型

declare
/* 定义一个table类型 */
type numstype is type of s_emp.id%type index by binary_integer;
/* 使用类型定义的变量 */
var_nums numstype;
begin
/* 给变量赋值 */
var_nums(100):=1;
var_nums(2):=3;
var_nums(200):=50;
var_nums(300):=27;
dbms_output.put_line (var_nums(200));
end;
/

declare
type numstype is table of s_emp.id%type index by binary_integer;
var_nums numstype;/* 定义一个访问下标 */
var_ind binary_integer;
begin
var_nums(100):=1;
var_nums(2):=3;
var_nums(200):=13;
var_nums(300):=23;
var_ind:=100;  
dbms_output.put_line (var_nums(var_ind));
end;
/


迭代器思想
first() -> 得到第一个元素对应的下标
next(n) -> 根据一个元素的下标得到下一个元素的下标
last() -> 得到最后一个元素的下标

declare
type numstype is table of s_emp.id%type index by binary_integer;
var_nums numstype;
var_ind binary_integer;
begin
var_nums(100):=1;
var_nums(2):=3;
var_nums(200):=13;
var_nums(300):=23;
var_ind:=var_nums.first();   
dbms_output.put_line(var_nums(var_ind));
        var_ind:=var_nums.next(var_ind);
        dbms_output.put_line(var_nums(var_ind));
        var_ind:=var_nums.next(var_ind);
        dbms_output.put_line(var_nums(var_ind));
`
        var_ind:=var_nums.next(var_ind);
        dbms_output.put_line(var_nums(var_ind));
        var_ind:=var_nums.last();
        dbms_output.put_line(var_nums(var_ind));
end;
/


变量的作用域和可见性

declare
var_m nuimber:=100;
 begin
declare
var_n number:=10;
begin
/* 局部可以访问全局  (var_m) */
end;
/* 全局不能访问局部 */
end;
/

解决方法:

<<flag>>             /* 标签语法   解决名字冲突 */
declare
var_m number:=100;
begin
declare
var_n number:=10;
begin
/* 局部优先 */
dbms_output.put_line (var_m);
/* 隐藏局部 */
dbms_output.put_linr (abc.var_n);
end;
end;
/

因为也是刚刚学习plsql  肯定会有很多整理得不够完成甚至错误的地方,希望大家能够指出我的错误。谢谢!

plsql还有条件控制语句 循环语句  等学习了我会努力整理,和大家一起分享。



原创粉丝点击