plsql guide(基础详解)(8)

2019-04-01 23:16

OUT 型参数,代表既可向子程序传递值,同时子程序也可返回值给主程序。

变量类型

通用数据类型: 数据类型 BINARY_INTEGER 说明 基本数值整型,-2147483647 ----- 2147483647 基本浮点数值型 固定长度的字符型,最大值为32760 可变常字符型,最大长度为32760 二进制型,最大长度为32760 NUMBER[(precision,scale)] CHAR[(maximun_length)] LONG LONG RAW VARCHAR2(maximum_length) 可变长字符型,最大长度为32767 DATE BOOLEAN

程序单元(过程、匿名块和函数)中变量的声明: Identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]; 注意:具有初始值的常量和变量被认为是NOT NULL的,一行最多只有

一个常量或是变量的声明 %TYPE类型:

这是一种动态数据类型,在PL/SQL中动态决定器数据类型。它有两大优点:

1. 决定其数据类型的数据库表列的类型未知;

2. 决定其数据类型的数据库表列的类型在运行时是可变的。

为了在PL/SQL中保存某个列的数值,必须确保变量与列具有相同的数据类型和精度,否则,常会造成PL/SQL错误或是精度的丢失。

而%TYPE类型是由某一个预定的变量或时数据库表中列决定的,这样就可以确保数据类型的一致。 例: … … 日期和时间类型 逻辑型(TRUE、FALSE或NULL) l_last_name l_salary t_emp.last_name%TYPE t_emp.base_salary%TYPE

33

Company Confidential - For internal use only

复合数据类型: 5. PL/SQL TABLES :

它有两部分组成:I) BINARY_INTEGER型的Primary Key; 注意:

i. PL/SQL TABLES数据类型并不等同于数据库中的表; ii. iii. iv.

PL/SQL TABLES数据类型类似一个一维数组; PL/SQL TABLES类型包含两个组件; PL/SQL TABLES类型可动态增长。

II) 数据的列范围。

声明如下:

TYPE type_name IS TABLE OF scalar_datatype [NOT NULL] INDEX BY BINARY_INTEGER; identifier type_name; 例:

… TYPE name_table_type IS TABLE OF VARCHAR2(25) INDEX BY BINARY_INTEGER; First_name_table name_table_type; … first_name_table(1):=‘FRANCK‘; 6. PL/SQL RECORDS:

它包含一个或是一个以上的任何范围、记录、PL/SQL TABLES类型的组件。 注意: i.

PL/SQL RECORD数据类型并不等同于数据库中的表中的一条记录;

PL/SQL RECORD数据类型类似一个多维数组; PL/SQL RECORD类型包含多个组件; PL/SQL RECORD类型可动态增长;

PL/SQL RECORD类型方便地从一个表中获取一行数据,以便于PL/SQL的处理。

v. vi. vii. viii.

声明如下:

TYPE type_name IS RECORD (field_name1 field_type [NOT NULL { :=|DEFAULT} expr], (field_name2 field_type [NOT NULL { :=|DEFAULT} expr], …); identifier type_name; Company Confidential - For internal use only

34

例:

… TYPE emp_record_type IS RECORD (last_name varchar(25), base_salary number, manager_id number); employee_record emp_record_type; … employee_record.last_name:=‘FRANCK‘;

LESSON 2数据获取和游标

在本节中,主要讲述如何在PL/SQL中访问数据库、获取数据库数据,同时,介绍游标的使用。 数据获取 SELECT INTO FROM WHERE I. II. III.

select_list variable_name | record_name table condition; INTO 语句是必须的 Select 只有一行数据返回 Select_list 不能为简写( eg. *)

检索的数据列,可以包括SQL表达式、单行函数或是组函数;

是一系列变量,用来存储检索的数据值;

PL/SQL RECORD变量,用来存储检索的数据值; 数据库表;

一系列约束条件,实现数据的检索。

Select_list

Variable_name Record_name Table Condition

一个PL/SQL块并非是一个事务处理单元。Commit、savepoints、和rollback是独立的块,但是可以把这些命令写入在一个PL/SQL块中。PL/SQL块不支持数据定义语言(DDL),例如CREATE TABLE,ALTER TABLE,或是DROP TABLE。PL/SQL也不支持数据控制语言(DCL),例如GRANT或是

REVOKE。但是,可以通过在PL/SQL块中,使用DBMS_SQL包来实现DDL和DCL功能。

35

Company Confidential - For internal use only

使用范例:

FUNCTION sum_emp(v_dep_id IN NUMBER) RETURN NUMBER IS L_sum_salary number; BEGIN SELECT sum(salary) INTO l_sum_salry FROM t_emp WHERE dept_id = v_dept_id; RETURN (L_sum_salary); END; 若有零行或是多于一行数据返回 ,则会触发SELECT的例外:TOO_MANY_ROWS(多于一行数据返回) NO_DATA_FOUND(未检索到一条数据) 在PL/SQL块中,还可以使用其它DML命令: INSERT 插入一行数据到数据库的某个表中去; UPDATE 更新数据库表中的某一行数据; DELETE 从数据库表中删除一行不要数据。 游标

在中使用SQL时,数据库服务器总是在内存区开闭一块空间来存储这段SQL的解析和执行结果,这个区域就称为游标。游标有显式游标和隐式游标两种,当在程序块中使用SQL检索时,PL/SQL就自动创建了一个隐式游标,PL/SQL自动管理这个游标;显式游标是由编程者自行定义和命名。游标建立后,在PL/SQL中有四种属性可使用:

SQL%ROWCOUNT 返回最近的SQL语句检索行数,整型 SQL%FOUND

判断最近的SQL语句执行的结果,若返回一行或多行,则为TRUE,Boolean型

SQL%NOTFOUND 判断最近的SQL语句执行的结果,若未返回一行,则为

TRUE,Boolean型 SQL%ISOPEN

对于隐式游标,值总是FALSE,因为隐式游标在执行后立即自动关闭

显式游标声明:

CURSOR cursor_name IS Select statement……; 同时,显式游标也可以是带参数的,如下:

CURSOR cursor_name(parameter and parameter list) IS Select statement……;

36

Company Confidential - For internal use only

隐式游标例子:

RPOCEDURE del_rows(v_warehouse_id number) IS V_rows_del number; BEGIN DELETE FROM t_onhand WHERE warehouse_id = v_warehouse_id; V_rows_del:=SQL%ROWCOUNT; DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_rows_del)||‘ rows deleted.‘); END;

LESSON 3PL/SQL控制流

在本节中,主要讲述在PL/SQL块中的流程控制。PL/SQL中有两种流程控制结构,一是IF语句的条件控制结构,二是LOOP语句循环控制结构。 IF 语句

IF condition THEN 语句; [ELSEIF condition THEN 语句;] [ELSE 语句;] END IF; 类似于其他结构化程序语言,它是一种条件控制流。 注意: 1. 2. 3. 4.

ELSIF是作为一个单词; END IF是两个单词; 允许多个ELSIF语句; 至多只有一个ELSE语句。

使用范例:

… if v_salary<2000 then return v_salary*0.05; elsif v_salary<3000 then return v_salary*0.1; elsif v_salary<5000 then return v_salary*0.15; else return v_salary*0.2 end if; … Company Confidential - For internal use only 37


plsql guide(基础详解)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小区高清数字监控系统技术方案书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: