PLSQL语言
1、PLSQL语言
PLSQL语言是ORACLE公司对SQL语言的功能的扩展,它是将过程性结构与ORACLE SQL无缝的集成在一起而产生的一种结构化的强有力的语言,是一种高级数据库程序设计语言。
2、SQL*PLUS
SQL*PLUS是ORACLE公司提供的一个工具程序,它用于运行SQL语句和PL/SQL块,并且用于跟踪、调试SQL语句和PL/SQL块。该工具程序不仅可以在命令行运行,也可以在WINDOWS窗口环境中运行。
2.1 在命令行运行SQL*PLUS
格式:sqlplus [username]/[password][@SERVER]
其中: username用于指定数据库用户名
password用于指定用户口令
@SERVER用于指定主机字符串或网络服务名,当连接到本地数据库时,不需要提供网络服务名。
2.2 在WINDOWS环境中运行SQL*PLUS
2.2.1 具体方法:
开始->程序->Oracle - OraDb10g_home1->应用程序开发->SQL PLUS
2.2.2 在命令行执行SQLPLUSW命令
格式:sqlplusw [username]/[password][@SERVER]
2.3 SQL*PLUS的使用
2.3.1 直接编辑:使用ED命令或在SQL>提示符下键入,以 / 退出,键入 / 或RUN执行行。
2.3.2 使用文件:@或START执行 .sql文件。
例:查询DEPT表中的所有行
例1、使用@命令
SQL> @ d:/dept.sql;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
例2、使用START命令
SQL> start d:/dept.sql;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
3、PL/SQL块的组成
3.1 PL/SQL语言以块为单位,块中可以嵌套子块。
3.2 一个基本的PL/SQL块由3部分组成:
-
定义部分(DECLARE):PL/SQL中使用的变量、常量、游标、复杂数据类型、和异常处理的名字都必须先定义后使用,并且必须定义在以关键字DECLARE开头的定义部分。
-
执行部分 (BEGIN):该部分是PL/SQL块的主体,包含该块的可执行语句。该部分定义了块的功能,是必须的。由关键字BEGIN开始,EXCEPTION或END结束。
-
异常处理部分(EXCEPTION):该部分包含该块的异常处理程序,当该块程序体中的某个语句出现异常时,程序控制转到异常部分的相应的异常处理程序中进行进一步的处理,该部分由关键字EXCEPTION开始,END关键字结束。
3.3 定义部分
简单变量定义格式:
<variable_name> [constant] <datatype> [ [not null] {default | :=}<exception>];
说明:
①定义部分是包括在关键字DECLARE和BEGIN之间的部分,每条语句后用';'结束。
②每行只能定义一个标识符。
③如果加上关键字CONSTANT,则表示所定义的标识符为一个常量,必须为它赋初始值。
④每个标识符必须以字母开头,而且不分大小写。如果定义的标识符不能为空,则必须加上关键字NOT NULL,并赋初始值。
⑤为标识符赋值时,使用赋值符号':=',默认值为NULL。
4、 赋值语句
赋值符号为':='
格式:<变量名>:=<表达式>
5、ORACLE常用数据类型
number:数字型,范围10-130~10125
char:定长字符型,最大2000个字符。
varchar2:变长字符串,最大4000个字符。
long:大文本,最大32760个字符。
date:日期型,包括年、月、日、时、分、秒。
boolean:逻辑型,取值true、false、null。
6、使用%TYPE
使用%TYPE声明一个变量,可以使它的类型与某个变量或数据库基本表中某个列的数据类型一致。
例1:
declare
Ename emp.eNAME%TYPE;
JOB Ename%TYPE;
BEGIN
select ename,job into Ename,job
from emp
where empno=7369;
DBMS_OUTPUT.PUT_LINE(Ename||' , '||job);
END;
输出:SMITH , CLERK
7、记录类型
记录类型定义的一般格式:
TYPE <RecordTypeName> IS RECORD
(
<field> <datatype> [[not null]{default | :=}<expression>]
[,<field>......]
);
说明:记录类型变量的属性引用方法是' . '引用。
例1:
DECLARE
TYPE abc IS RECORD --定义记录类型
(
aname emp.ename%type,
ajob emp.job%type,
adate emp.hiredate%type
);
a abc; --定义记录变量
BEGIN
SELECT ENAME,JOB,HIREDATE INTO A.ANAME,A.AJOB,A.ADATE
FROM EMP
WHERE EMPNO=7369;
DBMS_OUTPUT.put_line(A.ANAME||' , '||A.AJOB||' , '||A.ADATE);
END;
输出:SMITH , CLERK , 17-12月-80
8、使用%ROWTYPE
使用%ROWTYEP声明一个记录型变量,可以使它的类型与某个基本表的数据结构一致。
例1:
DECLARE
A EMP%ROWTYPE;
BEGIN
SELECT ENAME,JOB,HIREDATE INTO A.ENAME,A.JOB,A.HIREDATE
FROM EMP
WHERE EMPNO=7369;
DBMS_OUTPUT.put_line(A.ENAME||' , '||A.JOB||' , '||A.HIREDATE);
END;
输出:SMITH , CLERK , 17-12月-80
今天:2010-03-06 23:08:04