当前位置:Gxlcms > 数据库问题 > oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

时间:2021-07-01 10:21:17 帮助过:2人阅读

PL/SQL 简介

每一种数据库都有这样的一种语言PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言。我们知道SQL语言是没有分支和循环的,而PL语言是为了补充SQL语言的,是带有了分支和循环的语言

PL/SQL 语法

基本数据类型声明

declare

v_name varchar2(20);

v_temp number(1);

v_count binary_integer := 0;

v_sal number(7,2) := 4000.00;

v_date date := sysdate;

v_pi constant number(3,2) := 3.14;

v_valid boolean := false;

v_name varchar2(20) not null := ‘myname‘;

 

declare开头声明变量,v_name表示变量名字,通常以v_xxx这种格式命名变量,varchar2(20)表示变量类型, :=为赋值操作符

PL/SQL里面boolean类型变量在定义的时候一定要给初始值,Oracle 里面的put_line()不能打印boolean类型的值。

 

 

%type属性声明

还有一种声明变量的方法:使用%type属性。

declare

v_empno number(4);

v_empno2 emp.empno%type;

v_empno3 v_empno2%type;

begin

dbms_output.put_line(‘Test‘);

end;

使用emp表中empno字段的类型,这种方式的好处是PL/SQL声明的变量类型随着表字段类型的变化而变化。dbms_output.put_line(‘Test‘);表示输出Test。

table类型声明

table类型类似java中的数组类型。

declare

type type_table_emp_empno is table of emp.empno%type index by binary_integer;

v_empnos  type_table_emp_empno;

begin

v_empnos(0) := 7369;

v_empnos(2) := 7839;

v_empnos(-1) := 9999;

dbms_output.put_line(v_empnos(-1));

end;

 

--type开头

--类型名type_table_emp_empno

--is table of 表示table数据类型,相当于java里面的数组Array[]

--emp.empno%type表示该类型数据装的是emp表中empno类型的数据

--index by binary_integer 表示下表

--v_empnos  type_table_emp_empno;使用type_table_emp_empno类型声明变量v_empnos

record数据类型声明

declare

type type_record_dept is record

     (

deptno dept.deptno%type,

dname dept.dname%type,

loc dept.loc%type

     );

     v_temp type_record_dept;

begin

v_temp.deptno := 50;

v_temp.dname := ‘aaaa‘;

v_temp.loc := ‘bj‘;

dbms_output.put_line(v_temp.deptno || ‘ ‘ || v_temp.dname);

end;

/

--type type_record_dept is record声明type_record_dept是record类型。

--该类型中有三个属性deptno ,dname ,loc ,类型分别为dept表中deptno ,dname ,loc 三个字段的类型。record类型类似java中的类,record类型可以存储一条记录

-- v_temp type_record_dept;使用type_record_dept类型声明变量v_temp。

 

另一种声明record变量的方法:

declare

v_temp dept%rowtype;

begin

v_temp.deptno := 50;

v_temp.dname := ‘aaaa‘;

v_temp.loc := ‘bj‘;

dbms_output.put_line(v_temp.deptno || ‘ ‘ || v_temp.dname);

人气教程排行