PL/SQL(一):基础知识

来源:互联网 发布:win7软件打不开怎么办 编辑:程序博客网 时间:2024/06/06 04:39
一、什么是PL/SQL PL:Procedural language SQL:Structured Query Language PL/SQL是由Oracle开发,专用于Oracle的一种程序设计语言,对SQL语句的扩展,增加了编程语言的特点二、优点1、改善了性能 以整个语句块发送给服务器端,降低网络拥挤2、可重用性 能运行在任何Oracle环境中3、模块化 每个PL/SQL单元可以包含一个活多个程序块,程序中的每一块都实现一个逻辑操作,块之间可以使独立活是嵌套。  

三、块结构
1、组成
1)declare
 定义部分变量,先定义后使用
2)begin 
 可执行部分,内容主体,以end结束
3)exception
 异常处理部分,程序异常时的处理动作
2、格式
DECLARE – 可选
 变量、常量、游标、用户自定义的特殊类型
BEGIN – 必须
 SQL 语句
 PL/SQL 语句
EXCEPTION – 可选
 错误发生时的处理动作
END; – 必须
3、块类型
1)匿名块
 只执行一次,不能存储在数据库中
2)过程、函数和包
 是命名的PL/SQL块,存储在数据库中,能被多次执行,可以被外部程序来执行 
3)触发器
 是命名的PL/SQL块,存储在数据库中,当相应的触发事件发生时自动被执行
区别:
 仅执行一动作时定义为过程,计算值时定义为函数
四、变量声明
1、声明语法
 图示

2、%type属性
 参照变量
 好处
  跟数据库类型保持一致
五、表达式
1、函数的应用
   过程语句中的有效函数
 1)单行数字:mod、round、trunc等
 2)单行字符:concat length lower substr等
 3)数据类型转换:to_char to_date to_number等
 4)日期:add_months sysdate months_between等
   无效函数
 1)decode
 2)分组函数(avg min max count sum等)
 备注:在PL/SQL语句中适用
2、事务处理
 事务开始与commit 或 rollback 后的第一个DML语句
 使用commit 和 rollback 语句来终止一个事务
 在事务处理过程中使用savepoint来标记中间点
六、与Oracle的交互
 图
七、使用
1、变量赋值
 v_name := 'sam';
2、输出结果
 dbms_output.put_line('名字是'||v_name);
3、注释
 1)单行注释 :--注释内容
 2)多行注释 :/* 注释内容*/

八、示例代码

demo表:

create table T_STU(STU_ID char(5),
                   STU_NAME   varchar(8),
                   constraint PK_T_STU primary key (STU_ID)

);

create table T_SCORE(
       EXAM_SCORE number(5,2),
       EXAM_DATE  date,
       AUTOID  number(10),
       STU_ID char(5),
       SUB_ID char(3),
       constraint PK_T_SCORE primary key (AUTOID),
       constraint PK_T_SCORE_REFE foreign key (STU_ID) references T_STU (STU_ID)
);

insert into T_STU values('1000','gk');
insert into T_STU values('1001','clc');
insert into T_STU values('1002','ccc');

-------------------------------------------------

insert into T_SCORE values (99.5,sysdate-1,10000000,'1000','000');
insert into T_SCORE values (92.5,sysdate-1,10000001,'1000','001');
insert into T_SCORE values (90.5,sysdate-1,10000002,'1000','002');
insert into T_SCORE values (89.5,sysdate-2,10000003,'1001','000');
insert into T_SCORE values (82.5,sysdate-2,10000004,'1001','001');
insert into T_SCORE values (80.5,sysdate-2,10000005,'1001','002');
insert into T_SCORE values (59.5,sysdate-2,10000006,'1002','000');
insert into T_SCORE values (52.5,sysdate-2,10000007,'1002','001');
insert into T_SCORE values (50.5,sysdate-2,10000008,'1002','002')





1、基本调用

declare   c_name constant varchar(20) := 'gaoke';  --常量定义时就要赋初值  n_name varchar(20) not null := 'curry';  --not null 定义时也要赋初值    id varchar(20);  name varchar(20) := 'gaoke';  age number;  add varchar(20);  begin   null;  id := '031302306';  age := 23;  add := id || name || age;  dbms_output.put_line('工号: '|| id);  dbms_output.put_line('姓名: '|| name);  dbms_output.put_line('年龄: '|| age);  dbms_output.put_line('汇总: '|| add);end;
运行结果:

2:调用数据库

declare  score T_SCORE.EXAM_SCORE%type;  date1 T_SCORE.EXAM_DATE%type;  id1 T_SCORE.STU_ID%type;begin  select EXAM_SCORE, EXAM_DATE, STU_ID into score, date1, id1  FROM T_SCORE  where AUTOID=10000002;  dbms_output.put_line(score);    dbms_output.put_line(date1);  dbms_output.put_line(id1);end;
运行结果:




3:聚集函数

declare  num number;  max_score T_SCORE.EXAM_SCORE%type;begin  num := MOD(10,3);  select max(EXAM_SCORE) into max_score from T_SCORE;  dbms_output.put_line(num);  dbms_output.put_line(max_score);end;
运行结果:


4:事务

begin  insert into T_SCORE values (100,sysdate-1,70000000,'1000','000');  savepoint a;  --设置保持点 a  insert into T_SCORE values (10,sysdate-1,80000000,'1000','000');  savepoint b;   --设置保持点 b  rollback to savepoint a;  --回滚至保存点 a  commit;end;

运行结果:(第二条数据没有插入到数据库中)




















原创粉丝点击