这篇文章介绍的是pl/sql数据库语言,如有错误或者不当之处,希望各位大神批评指正。
什么是pl/sql?
- PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用
- PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的,但支持Navicat Premium。
- 是面向过程的语音
pl/sql可用的sql语句
- DML
INSERT,UPDATE,DELETE,SELECT INTO, - DDL
CREATE , DROP ,TRUNCATE ,ALTER - DCL
COMMIT,ROLLBACK,SAVEPOINT。
pl/sql块
pl/sql块由声明部分、执行部分、异常处理部分组成,结构如下:
DECLEAR
/*声明部分:声明pl/sql用到的变量类型及游标,及局部的存储过程及函数*/
BEGIN
/*执行部分:过程及sql语句,是程序的主要部分*/
EXCEPTION
/*异常部分:错误处理*/
END
/*sql块结束*/
注:其中,执行部分是必须的
- 简单的例子
--启用输出
set serveroutput on
declare
/*声明变量,类型,游标*/
begin
/*对程序的执行部分,类似于java中的main方法*/
dbms.output('hello pl/sql!') ;
--exception
/*对begin发生的异常进行处理
when...then...
when...then...*/
end ;
/*pl/sql代码块结束*/
声明变量DECLARE
声明变量的规范
标识符 | 命名规则 | 例子 |
---|---|---|
程序变量 | V_name | V_name |
程序常量 | C_Name | C_company_name |
游标变量 | Name_cursor | Emp_cursor |
异常标识 | E_name | E_too_many |
表类型 | Name_table_type | Emp_record_type |
表 | Name_table | Emp |
记录类型 | Name_record | Emp_record |
SQL*Plus | 替代变量 | P_name |
绑定变量 | G_name | G_year_sal |
注:变量的类型同oracle
声明变量
- 例假设有表student,查询学生的年龄,姓名,性别
declare
--声明变量
v_age number(3) ;
v_name varchar(200) ;
v_sex char(2);
--或者
v_age student.age%type ;
v_name student.name%type ;
v_sex student.sex%type ;
begin
select age,name,sex
into v_age,v_name,v_sex
from student
where id = 100001 ;
dbms_output.put_line(v_name||','||v_age||','||v_sex) ;
end ;
注:数据类型要对应,长度要大于等于查的字段的长度,推荐使用变量名%type取对应字段
声明记录类型
- 记录类型:记录类型是把逻辑相关的数据作为一个单元存储起来,它必须包括至少一个标量型或RECORD 数据类型的成员,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。
-例,定义一个记录类型用于查学生
declare
/*定义记录类型*/
type student_recode is record(
v_age student.age%type ,
v_name student.name%type ,
v_sex student.sex%type
);
/*声明记录类型*/
v_student_record student_recode ;
/*或者使用直接使用rowType*/
v_student_record student%rowType ;
begin
select age,name,sex
into student_recode
from student
where id = 100001 ;
dbms_output.put_line(v_student_record.v_name||','||v_student_record.v_age||','||v_student_record.v_sex) ;
end ;
- table%rowType:返回类型与table中的列类型一致
- param%Type:返回类型与param字段一致
ql/sql的赋值符为 :=
逻辑运算符、关系运算符、算术运算符同oracle的相关运算符