Oracle中的PL/SQL(一)

一、什么是PL/SQL

PL/SQL通过增加了用在其它过程性语言中的结构来对SQL进行了扩展,使得它不仅是一个数据库查询语言,而且也是一个编程语言。
二、PL/SQL的语法结构
 
整个PL/SQL块分三部分:
声明部分(用declare开头)
执行部分(以begin开头)
异常处理部分(以exception开头)
其中执行部分是必须的,其他两个部分可选。
语法如下:
DECLARE
变量、常量、游标、自定义异常
BEGIN
SQL语句
PL/SQL控制语句
EXCEPTION
错误发生异常时执行的动作
END;
 
其中声明变量的语法:
变量名 类型 [constant] [not null] [:=value];
例:
Declare
v_firstname varchar2(20);
v_last_name varchar2(20);
注意:在声明部分,每一行只能有一个变量声明,如以下的声明是错误的:
Declare
v_firstname , v_lastname varchar2(20); (错误)
注意一:
如果变量在声明时,使用了constant,则该变量应被初始化,且以后不能改变它的值。
declare
C_min constant number(5):=10000;
如果在声明时,指明not null,那么应该给该变量赋初值。
下面声明是错误的:
Declare
v_tempvar number not null;
正确的声明为:
Declare
v_tempvar number not null:=1;
注意二:
CONSTANT关键字是在变量类型之前列出的,而NOT NULL是在数据类型之后列出的。
 
使用%TYPE属性
定义的变量的数据类型和长度与数据库表中的列保持一致。
例:
Declare
v_empName EMP.ENAME%type;
使用%ROWTYPE属性
定义变量类型为记录型变量,它表示和数据表一样类型的记录行。
例:
Declare
v_empRecord EMP%rowtype;
v_empRecord将与表EMP有相同的结构。如果表的定义改变了,
则记录的类型也随之改变。
 
 
三、变量赋值
declare
emp_num number(4):=1;
emp_name varchar(100);
begin
dbms_output.put_line('初始值:'||emp_num );
emp_num:=2;
dbms_output.put_line('第1次赋值:' ||emp_num );
select count(*) into emp_num from emp;
dbms_output.put_line('第2次赋值:' ||emp_num );
select empno, ename into emp_num, emp_name from emp where empno=7788;
dbms_output.put_line(emp_num|| ' =' ||emp_name );
end;
记录型变量赋值:
declare
v_empRecord EMP%rowtype;
begin
select * into v_empRecord from emp where empno=7788;
dbms_output.put_line('empno =' ||v_empRecord.empno );
dbms_output.put_line('ename =' ||v_empRecord.ename );
end;
复合类型变量:
使用方法:
1.先定义类型 类型中描述了 这是一个RECORD
2.但却没有说明内部具体列的内容,定义自定义类型就是为了定义record内部都包含什么列.
3.再将定义好的类型关联一个变量
引用record类型中的值 记录名.内部列名
例:
DECLARE
--第一个变量声明
v_sal number(7,2);
--第二个变量声明
TYPE emp_record_type IS RECORD --复合类型变量
(ename VARCHAR2(25),
job VARCHAR2(10),
sal NUMBER(7,2));
emp_record emp_record_type;
begin
emp_record.ename := 'Alvin';
emp_record.job := 'clerk';
emp_record.sal := 1000;
dbms_output.put_line(emp_record.ename||' '||emp_record.job||'
'||emp_record.sal);
end;
posted @ 2020-07-03 15:58  夫人nn  阅读(100)  评论(0)    收藏  举报