Procedual language/structured query
language(程序语言/结构化查询语言)
sql语言只是访问,操作数据库的语言,而并不是一种程序设计语言,因此不能用于程序开发
pl/sql是oracle在标准sql语言上进行过程性扩展后形成的程序设计语言
declare
? --声明部分,主要包含变量的声名,类型的定义等
begin
? --plsql代码,主要包含流程控制语句,增删改查语句
exception
? --异常处理代码,当程序出现错误时执行这一部分
end;
declare
? --单行注释,两个中划线后面的内容为注释
begin
? /*多行注释
??? 我是注释
??? **,我也是注释
? */
end;
变量的定义
变量名 数据类型[:=默认值];
常量的定义
常量名 constant 数据类型:=初始值;
变量名,常量名,存储过程名,函数名,触发器名等,都叫做标识符
declare
? v_str1 varchar2(20);? --声明字符串变量
? v_str2 varchar200(20):='abc';?? --声明变量时设置初始值
? PI constant number(15,14):=3.1415926; --声明常量
begin
? v_str1:='abc';? --将变量的值设置为'abc'
? dbms_output.put_line(v_str1||v_str2||PI);? --输出到屏幕
end;
输出屏幕abcabc3.1415926
变量名 表名.列名%type
? /*empno的类型是number(4),v_empno的类型就是number(4),相当于v_empno
number(4);*/
? v_empno emp.empno%type;
record类型:是记录类型,它可以存放多个值
使用时需要先声名一个记录类型(定义一个类型),根据定义的类型去声名变量
type 类型名 is record(
属性名 数据类型 [not null] [:=默认值],
属性名 数据类型,
属性名 数据类型,
..
属性名 数据类型
);
记录类型变量的声名:
变量名 记录类型名;
记录类型的使用:
不能直接使用变量名等于一个普通的数据.
变量名.属性名:=值; --记录类型的赋值(给记录类型的属性赋值)
变量名.属性名; --取一个记录变量的属性值
例子
declare
? --声明一个记录类型,有两个属性,一个数字类型,一个字符串类型
? type my_type is record(
??? n number(4):=1,
??? str varchar2(20)
? );
?
? --声明一个记录类型变量
? v_rec my_type;
begin
? --打印记录类型默认的n属性的值
? dbms_output.put_line(v_rec.n);
? --修改记录类型的属性值
? v_rec.n:=9;
? v_rec.str:='abc';
? --打印n和str的值
? dbms_output.put_line(v_rec.n||' - '||v_rec.str);
end;
声明
变量名 表名%rowtype;
使用
变量名.属性名
例子
declare
/*声明一个dept表的%rowtype 类型的变量
? 它相当于如下代码
? type dept_type is record(
??? deptno dept.deptno%type,
??? dname dept.dname%type,
??? loc dept.loc%type
? );*/
? v_dept dept%rowtype;
begin
? --给v_dept的各个属性赋值
? v_dept.DEPTNO:=10;
? v_dept.DNAME:='CLERK';
? v_dept.LOC:='qingdao';
? --打印v_dept的属性值
? dbms_output.put_line(v_dept.deptno||' - '||
?????????????????????? v_dept.DNAME||' - '||
?????????????????????? v_dept.LOC);
end;
原文:https://www.cnblogs.com/inmeditation/p/12013593.html