当前位置:文档之家› PLSQL基础-1

PLSQL基础-1

PLSQL基础-1
PLSQL基础-1

PL/SQL程序设计

目录

第一章PL/SQL 程序设计简介 (4)

§1.2SQL与PL/SQL (4)

§1.2.1 什么是PL/SQL? (4)

§1.2.1 PL/SQL的好处 (4)

§1.2.2 PL/SQL 可用的SQL语句 (5)

§1.3运行PL/SQL程序 (5)

第二章PL/SQL块结构和组成元素 (6)

§2.1PL/SQL块 (6)

§2.2PL/SQL结构 (6)

§2.3标识符 (6)

§2.4PL/SQL变量类型 (7)

§2.4.1 变量类型 (7)

§2.4.2 复合类型 (9)

§2.4.3 使用%ROWTYPE (11)

§2.4.4 LOB类型* (11)

§2.4.5 Bind 变量 (11)

§2.4.6 INDEX BY TABLES (12)

§2.4.7 数据类型的转换* (13)

§2.5运算符和表达式(数据定义) (13)

§2.5.1 关系运算符 (13)

§2.5.2 一般运算符 (13)

§2.5.3 逻辑运算符 (14)

§2.6变量赋值 (14)

§2.6.1 字符及数字运算特点 (14)

§2.6.2 BOOLEAN 赋值 (14)

§2.6.3 数据库赋值 (14)

§2.6.4 可转换的类型赋值 (15)

§2.7变量作用范围及可见性 (15)

§2.8注释 (16)

§2.9简单例子 (17)

§2.9.1 简单数据插入例子 (17)

§2.9.2 简单数据删除例子 (17)

第三章PL/SQL流程控制语句 (18)

§3.1条件语句 (18)

§3.2CASE表达式 (19)

§3.3循环 (19)

§3.3标号和GOTO (21)

§3.4NULL语句 (21)

第四章游标的使用 (23)

§4.1游标概念 (23)

§4.1.1 处理显式游标 (23)

§4.1.2 处理隐式游标 (26)

§4.1.3 游标修改和删除操作 (27)

第五章异常错误处理 (29)

§5.1异常处理概念 (29)

§5.1.1 预定义的异常处理 (29)

§5.1.2 非预定义的异常处理 (30)

§5.1.3 用户自定义的异常处理 (31)

§5.1.4 用户定义的异常处理 (32)

§5.2异常错误传播 (33)

§5.2.1 在执行部分引发异常错误 (33)

§5.2.2 在声明部分引发异常错误 (34)

§5.3异常错误处理编程 (34)

§5.4在PL/SQL中使用SQLCODE,SQLERRM (35)

第六章存储函数和过程 (36)

§6.1引言 (36)

§6.2创建函数 (36)

§6.3存储过程 (39)

§6.3.1 创建过程 (39)

§6.3.2 调用存储过程 (40)

§6.3.3 开发存储过程步骤 (42)

§6.3.4 与过程相关数据字典 (43)

第七章包的创建和应用 (44)

§7.1引言 (44)

§7.2包的定义 (44)

§7.3包的开发步骤 (45)

§7.4包定义的说明 (45)

§7.5子程序重载 (48)

§7.6删除过程、函数和包 (50)

§7.7包的管理 (50)

第八章触发器 (51)

§8.1触发器类型 (51)

§8.1.1 DML触发器 (51)

§8.1.2 替代触发器 (51)

§8.1.3 系统触发器 (51)

§8.2创建触发器 (51)

§8.2.1 触发器触发次序 (53)

§8.2.2 创建DML触发器 (53)

§8.2.3 创建替代(Instead_of)触发器 (54)

§8.2.3 创建系统事件触发器 (54)

§8.2.4 系统触发器事件属性 (55)

§8.2.5 使用触发器谓词 (56)

§8.2.6 重新编译触发器 (56)

§8.3删除和使能触发器 (56)

§8.4触发器和数据字典 (57)

§8.5数据库触发器的应用举例 (57)

第一章PL/SQL 程序设计简介

PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特点,以及了解PL/SQL语言的重要性和数据库版本问题。还要介绍一些贯穿全书的更详细的高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。

本章主要重点:

●PL/SQL概述

●PL/SQL块结构

●PL/SQL流程

●运算符和表达式

●游标

●异常处理

●数据库存储过程和函数

●包

●触发器

§1.2 SQL与PL/SQL

§1.2.1 什么是PL/SQL?

PL/SQL是Procedure Language & Structured Query Language 的缩写。ORACLE 的SQL是支持ANSI(American national Standards Institute)和ISO92 (International Standards Organization)标准的产品。PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数据库PL/SQL和工具PL/SQL。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。本章主要介绍数据库PL/SQL内容。

§1.2.1 PL/SQL的好处

§1.2.1.1 有利于客户/服务器环境应用的运行

对于客户/服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务器进行大量的数据交换。应用运行的效率自然就回受到影响。如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器端来执行。自然就省去了数据在网上的传输时间。

§1.2.1.2 适合于客户环境

PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL 命令或激活服务器端的PL/SQL程序运行。

§1.2.2 PL/SQL 可用的SQL语句

PL/SQL是ORACLE系统的核心语言,现在ORACLE的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有:

INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。

提示:在PL/SQL中只能用SQL语句中的DML 部分,不能用DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的话,只能以动态的方式来使用。

●ORACLE 的PL/SQL 组件在对PL/SQL 程序进行解释时,同时对在其所使用的

表名、列名及数据类型进行检查。

●PL/SQL 可以在SQL*PLUS 中使用。

●PL/SQL 可以在高级语言中使用。

●PL/SQL可以在ORACLE的开发工具中使用。

●其它开发工具也可以调用PL/SQL编写的过程和函数,如Power Builder 等都可以

调用服务器端的PL/SQL过程。

§1.3 运行PL/SQL程序

PL/SQL程序的运行是通过ORACLE中的一个引擎来进行的。这个引擎可能在ORACLE的服务器端,也可能在ORACLE 应用开发的客户端。引擎执行PL/SQL中的过程性语句,然后将SQL语句发送给数据库服务器来执行。再将结果返回给执行端。

第二章PL/SQL块结构和组成元素

§2.1 PL/SQL块

PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。

PL/SQL块的结构如下:

DECLARE

/* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数*/ BEGIN

/* 执行部分: 过程及SQL 语句, 即程序的主要部分*/

EXCEPTION

/* 执行异常部分: 错误处理*/

END;

其中执行部分是必须的。

PL/SQL块可以分为三类:

1. 无名块:动态构造,只能执行一次。

2. 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它

程序中调用它们。

3. 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

§2.2 PL/SQL结构

●PL/SQL块中可以包含子块;

●子块可以位于PL/SQL中的任何部分;

●子块也即PL/SQL中的一条命令;

§2.3 标识符

PL/SQL程序设计中的标识符定义与SQL 的标识符定义的要求相同。要求和限制有:

●标识符名不能超过30字符;

●第一个字符必须为字母;

●不分大小写;

●不能用’-‘(减号);

●不能是SQL保留字。

提示: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果.

例如:下面的例子将会删除所有的纪录,而不是KING 的记录;

DECLARE

Ename varchar2(20) :=’KING’;

BEGIN

DELETE FROM emp WHERE ename=ename;

END;

变量命名在PL/SQL中有特别的讲究,建议在系统的设计阶段就要求所有编程人员共同遵守一定的要求,使得整个系统的文档在规范上达到要求。下面是建议的命名方法:

§2.4 PL/SQL 变量类型

在前面的介绍中,有系统的数据类型,也可以自定义数据类型。下表是ORACLE类型和PL/SQL中的变量类型的合法使用列表:

§2.4.1 变量类型

例1.插入一条记录并显示;

DECLARE

Row_id UROWID;

info VARCHAR2(40);

BEGIN

INSERT INTO dept VALUES (90, ‘SERVICE’, ‘BEIJING’)

RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc

INTO row_id, info;

DBMS_OUTPUT.PUT_LINE(‘ROWID:’||row_id);

DBMS_OUTPUT.PUT_LINE(info);

END;

其中:RETURNING子句用于检索INSERT语句中所影响的数据行数,当INSERT语句使用VALUES 子句插入数据时,RETURNING 字句还可将列表达式、ROWID和REF值返回到输出变量中。在使用RETURNING 子句是应注意以下几点限制:

1.不能并行DML语句和远程对象一起使用;

2.不能检索LONG 类型信息;

3.当通过视图向基表中插入数据时,只能与单基表视图一起使用。

例2. 修改一条记录并显示

DECLARE

Row_id UROWID;

info VARCHAR2(40);

BEGIN

UPDATE dept SET deptno=80 WHERE DNAME=‘SERVICE’

RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc

INTO row_id, info;

DBMS_OUTPUT.PUT_LINE(‘ROWID:’||row_id);

DBMS_OUTPUT.PUT_LINE(info);

END;

其中:RETURNING子句用于检索被修改行信息:当UPDATE语句修改单行数据时,RETURNING 子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,

并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING 子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING 子句的限制与INSERT语句中对RETURNING 子句的限制相同。

例3.删除一条记录并显示

DECLARE

Row_id UROWID;

info VARCHAR2(40);

BEGIN

DELETE dept WHERE DNAME=‘SERVICE’

RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc

INTO row_id, info;

DBMS_OUTPUT.PUT_LINE(‘ROWID:’||row_id);

DBMS_OUTPUT.PUT_LINE(info);

END;

其中:RETURNING子句用于检索被修改行信息:当UPDATE语句修改单行数据时,RETURNING 子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING 子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING 子句的限制与INSERT语句中对RETURNING 子句的限制相同。

§2.4.2 复合类型

ORACLE 在PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型---记录和表.

§2.4.2.1 记录类型

记录类型是把逻辑相关的数据作为一个单元存储起来,它必须包括至少一个标量型或RECORD 数据类型的成员,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。

定义记录类型语法如下:

TYPE record_type IS RECORD(

Field1 type1 [NOT NULL] [:= exp1 ],

Field2 type2 [NOT NULL] [:= exp2 ],

. . . . . .

Fieldn typen [NOT NULL] [:= expn ] ) ;

例4 :

DECLARE

TYPE test_rec IS RECORD(

Code VARCHAR2(10),

Name VARCHAR2(30) NOT NULL :=’a book’);

V_book test_rec;

BEGIN

V_book.code :=’123’;

V_https://www.doczj.com/doc/8c7120219.html, :=’C++ Programming’;

DBMS_OUTPUT.PUT_LINE(v_book.code||v_https://www.doczj.com/doc/8c7120219.html,);

END;

可以用SELECT语句对记录变量进行赋值,只要保证记录字段与查询结果列表中的字段相配即可。

§2.4.2.2 使用%TYPE

定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。

使用%TYPE特性的优点在于:

●所引用的数据库列的数据类型可以不必知道;

●所引用的数据库列的数据类型可以实时改变。

例5:

DECLARE

-- 用%TYPE 类型定义与表相配的字段

TYPE t_Record IS RECORD(

T_no emp.empno%TYPE,

T_name emp.ename%TYPE,

T_sal emp.sal%TYPE );

-- 声明接收数据的变量

v_emp t_Record;

BEGIN

SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788;

DBMS_OUTPUT.PUT_LINE

(TO_CHAR(v_emp.t_no)||v_emp.t_name||TO_CHAR(v_emp.t_sal));

END;

例6:

DECLARE

v_empno emp.empno%TYPE :=&empno;

Type r_record is record (

v_name emp.ename%TYPE,

v_sal emp.sal%TYPE,

v_date emp.hiredate%TYPE);

Rec r_record;

BEGIN

SELECT ename, sal, hiredate INTO Rec FROM emp WHERE empno=v_empno;

DBMS_OUTPUT.PUT_LINE(Rec.v_name||'---'||Rec.v_sal||'--'||Rec.v_date);

END;

§2.4.3 使用%ROWTYPE

PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据

结构相一致。

使用%ROWTYPE特性的优点在于:

●所引用的数据库中列的个数和数据类型可以不必知道;

●所引用的数据库中列的个数和数据类型可以实时改变。

例7:

DECLARE

v_empno emp.empno%TYPE :=&empno;

rec emp%ROWTYPE;

BEGIN

SELECT * INTO rec FROM emp WHERE empno=v_empno;

DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工资:'||rec.sal||'工作时间:'||rec.hiredate); END;

§2.4.4 LOB类型*

ORACLE提供了LOB (Large OBject)类型,用于存储大的数据对象的类型。ORACLE

目前主要支持BFILE, BLOB, CLOB 及NCLOB 类型。

BFILE (Movie)

存放大的二进制数据对象,这些数据文件不放在数据库里,而是放在操作系统的某个目

录里,数据库的表里只存放文件的目录。

BLOB(Photo)

存储大的二进制数据类型。变量存储大的二进制对象的位置。大二进制对象的大小

<=4GB。

CLOB(Book)

存储大的字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。

大字符对象的大小<=4GB。

NCLOB

存储大的NCHAR字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符

数据块。大字符对象的大小<=4GB。

§2.4.5 Bind 变量

绑定变量是在主机环境中定义的变量。在PL/SQL 程序中可以使用绑定变量作为他们将

要使用的其它变量。为了在PL/SQL 环境中声明绑定变量,使用命令V ARIABLE。例如:

VARIABLE return_code NUMBER

VARIABLE return_msg VARCHAR2(20)

可以通过SQL*Plus命令中的PRINT 显示绑定变量的值。例如:

PRINT return_code

PRINT return_msg

例7:

VARIABLE result NUMBER

BEGIN

SELECT (sal*12)+nvl(comm, 0) INTO :result FROM emp WHERE empno=7788; END;

PRINT result

§2.4.6 INDEX BY TABLES

包括两个基本成分:

.数据处理类型为BINARY_INTEGER主键;

.标量或记录数据类型的列.

TYPE type_name IS TABLE OF

{column_type | variable%TYPE | table.column%TYPE } [NOT NULL] | table%ROWTYPE [ INDEX BY BINARY_INTEGER];

例8:

DECLARE

TYPE dept_table_type IS TABLE OF

dept%ROWTYPE INDEX BY BINARY_INTEGER;

my_dname_table dept_table_type;

v_count number(2) :=4;

BEGIN

FOR int IN 1 .. v_count LOOP

SELECT * INTO my_dname_table(int) FROM dept WHERE deptno=int*10;

END LOOP;

FOR int IN my_dname_table.FIRST .. my_dname_https://www.doczj.com/doc/8c7120219.html,ST LOOP

DBMS_OUTPUT.PUT_LINE(‘Department number: ‘||my_dname_table(int).deptno);

DBMS_OUTPUT.PUT_LINE(‘Department name: ‘|| my_dname_table(int).dname);

END LOOP;

END;

§2.4.7 数据类型的转换*

§2.5 运算符和表达式(数据定义)

§2.5.1 关系运算符

§2.5.2 一般运算符

§2.5.3 逻辑运算符

§2.6 变量赋值

在PL/SQL编程中,变量赋值是一个值得注意的地方,它的语法如下:

variable := expression ;

variable 是一个PL/SQL变量, expression 是一个PL/SQL 表达式.

§2.6.1 字符及数字运算特点

空值加数字仍是空值:NULL + < 数字> = NULL

空值加(连接)字符,结果为字符:NULL || <字符串> = < 字符串>

§2.6.2 BOOLEAN 赋值

布尔值只有TRUE, FALSE及NULL 三个值。如:

DECLARE

done BOOLEAN;

/* the following statements are legal: */

BEGIN

done := FALSE;

WHILE NOT done LOOP

Null;

END LOOP;

END;

§2.6.3 数据库赋值

数据库赋值是通过SELECT语句来完成的,每次执行SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。如:

例9:

DECLARE

emp_id emp.empno%TYPE :=7788;

emp_name emp.ename%TYPE;

wages emp.sal%TYPE;

BEGIN

SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages

FROM emp WHERE empno = emp_id;

Dbms_output.put_line(emp_name||’----‘||to_char(wages));

END;

提示:不能将SELECT语句中的列赋值给布尔变量。

§2.6.4 可转换的类型赋值

●CHAR 转换为NUMBER:

使用TO_NUMBER 函数来完成字符到数字的转换,如:

v_total := TO_NUMBER(‘100.0’) + sal;

●NUMBER 转换为CHAR:

使用TO_CHAR函数可以实现数字到字符的转换,如:

v_comm := TO_CHAR(‘123.45’) || ’元’ ;

●字符转换为日期:

使用TO_DATE函数可以实现字符到日期的转换,如:

v_date := TO_DATE('2001.07.03','yyyy.mm.dd');

●日期转换为字符

使用TO_CHAR函数可以实现日期到字符的转换,如:

v_to_day := TO_CHAR(SYSDATE, 'yyyy.mm.dd hh24:mi:ss') ;

§2.7 变量作用范围及可见性

在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。与其它高级语言类似,PL/SQL的变量作用范围特点是:

●变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开

始到该块的结束。

●一个变量(标识)只能在你所引用的块内是可见的。

●当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它

可能不用了)。

●在子块中重新定义该变量后,它的作用仅在该块内。

例10:

DECLARE

Emess char(80);

BEGIN

DECLARE

V1 NUMBER(4);

BEGIN

SELECT empno INTO v1 FROM emp WHERE LOWER(job)=’president’;

DBMS_OUTPUT.PUT_LINE(V1);

EXCEPTION

When TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE (‘More than one president’);

END;

DECLARE

V1 NUMBER(4);

BEGIN

SELECT empno INTO v1 FROM emp WHERE LOWER(job)=’manager’;

EXCEPTION

When TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE (‘More than one manager’);

END;

EXCEPTION

When others THEN

Emess:=substr(SQLERRM,1,80);

DBMS_OUTPUT.PUT_LINE (emess);

END;

§2.8 注释

在PL/SQL里,可以使用两种符号来写注释,即:

●使用双‘-‘ ( 减号) 加注释

PL/SQL允许用–来写注释,它的作用范围是只能在一行有效。如:

V_Sal NUMBER(12,2); -- 工资变量。

●使用/* */ 来加一行或多行注释,如:

/***********************************************/

/* 文件名:statistcs_sal.sql */

/***********************************************/

提示:被解释存放在数据库中的PL/SQL 程序,一般系统自动将程序头部的注释去掉。只有在PROCEDURE 之后的注释才被保留;另外程序中的空行也自动被去掉。

§2.9 简单例子

§2.9.1 简单数据插入例子

例11:

/* 本例子仅是一个简单的插入,不是实际应用。*/

DECLARE

v_ename VARCHAR2(20) := ‘Bill’;

v_sal NUMBER(7,2) :=1234.56;

v_deptno NUMBER(2) := 10;

v_empno NUMBER(4) := 8888;

BEGIN

INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate ) VALUES ( v_empno, v_ename, ‘Manager’, v_sal, v_deptno,

TO_DATE(’1954.06.09’,’yyyy.mm.dd’) );

COMMIT;

END;

§2.9.2 简单数据删除例子

例12:

/* 本例子仅是一个简单的删除例子,不是实际应用。*/

DECLARE

v_empno number(4) := 8888;

BEGIN

DELETE FROM emp WHERE empno=v_empno;

COMMIT;

END;

第三章PL/SQL流程控制语句

介绍PL/SQL的流程控制语句, 包括如下三类:

●控制语句: IF 语句

●循环语句: LOOP语句, EXIT语句

●顺序语句: GOTO语句, NULL语句

§3.1 条件语句

IF <布尔表达式> THEN

PL/SQL 和SQL语句

END IF;

IF <布尔表达式> THEN

PL/SQL 和SQL语句

ELSE

其它语句

END IF;

IF <布尔表达式> THEN

PL/SQL 和SQL语句

ELSIF < 其它布尔表达式> THEN

其它语句

ELSIF < 其它布尔表达式> THEN

其它语句

ELSE

其它语句

END IF;

提示: ELSIF 不能写成ELSEIF

例1:

DECLARE

v_empno emp.empno%TYPE :=&empno;

V_salary emp.sal%TYPE;

V_comment VARCHAR2(35);

BEGIN

SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;

IF v_salary<1500 THEN

V_comment:= ‘Fairly less’;

ELSIF v_salary <3000 THEN

V_comment:= ‘A little more’;

ELSE

V_comment:= ‘Lots of salary’;

END IF;

DBMS_OUTPUT.PUT_LINE(V_comment);

END;

§3.2 CASE 表达式

CASE selector

WHEN expression1 THEN result1

WHEN expression2 THEN result2

WHEN expressionN THEN resultN

[ ELSE resultN+1]

END;

例2:

DECLARE

V_grade char(1) := UPPER(‘&p_grade’);

V_appraisal VARCHAR2(20);

BEGIN

V_appraisal :=

CASE v_grade

WHEN ‘A’ THEN ‘Excellent’

WHEN ‘B’ THEN ‘Very Good’

WHEN ‘C’ THEN ‘Good’

ELSE ‘No such grade’

END;

DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’ Appraisal: ‘|| v_appraisal); END;

§3.3 循环

1. 简单循环

LOOP

要执行的语句;

EXIT WHEN <条件语句> /*条件满足,退出循环语句*/

END LOOP;

PLSQL学习简易快速入门

PLSQL学习简易快速入门 课程一 PL/SQL 基本查询与排序 本课重点: 1、写SELECT语句进行数据库查询 2、进行数学运算 3、处理空值 4、使用别名ALIASES 5、连接列 6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS 7、ORDER BY进行排序输出。 8、使用WHERE 字段。 一、写SQL 命令: 不区分大小写。 SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。 最后以;或 / 结束语句。 也可以用RUN来执行语句 二、例1:SQL> SELECT dept_id, last_name, manager_id FROM s_emp; 2:SQL> SELECT last_name, salary * 12, commission_pct FROM s_emp; 对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。 SQL> SELECT last_name, salary, 12 * (salary + 100) FROM s_emp; 三、列的别名ALIASES: 计算的时候特别有用; 紧跟着列名,或在列名与别名之间加“AS”; 如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。 例(因字体原因,读者请记住:引号为英文双引号Double Quotation): SQL> SELECT last_name, salary, 12 * (salary + 100) ”Annual Salary” FROM s_emp;

四、连接符号:|| 连接不同的列或连接字符串 使结果成为一个有意义的短语: SQL> SELECT first_name || ’’ || last_name || ’, ’|| title ”Employees” FROM s_emp SQL> select divid ||' '|| divname from pub_t_division_test where superid='001' 效果如下图: 五、管理NULL值: SQL> SELECT last_name, title, salary * NVL(commission_pct,0)/100 COMM FROM s_emp; 此函数使NULL转化为有意义的一个值,相当于替换NULL。 select divid,divname,NVL(addr,0) from pub_t_division_test where superid='001' 效果如下图: 六、SQL PLUS的基本内容,请参考 七、ORDER BY 操作: 与其他SQL92标准数据库相似,排序如: SELECT expr FROM table[ORDER BY {column,expr} [ASC|DESC]]; 从Oracle7 release 7.0.16开始,ORDER BY 可以用别名。 另:通过位置判断排序: SQL> SELECT last_name, salary*12 FROM s_emp ORDER BY 2; select * from pub_t_division_test where superid='001'order by3 这样就避免了再写一次很长的表达式。 另:多列排序: SQL> SELECT last name, dept_id, salary FROM s_emp ORDER BY dept_id, salary DESC; SQL>select * from pub_t_division_test where superid='001' order by 1,3 desc

PLSQL developer操作入门级知识讲解

P L S Q L d e v e l o p e r操 作入门级

目录 一 .登录PL/SQL Developer (3) 二 .登录后的基本设置 (4) 2.1 过滤显示 (4) 2.2登录界面的设置 (5) 三 .基本操作 (8) 2.1表的基本操作 (8) 2.1.1 SQL语句建表 (8) 2.1.2 如何在PL\SQL Developer里执行SQL语句 (9) 2.1.3 给表设置主键 (10) 2.1.4 编辑表的字段 (14) 2.1.5 输入条件查询 (15) 2.1.6删除表 (16) 2.1.7编辑表的数据 (17) 2.2视图(View) (19) 2.2.1概念 (19) 2.2.2创建视图 (19) 2.3其它数据库对象 (19) 2.4数据库对象的导出\导入 (20) 2.4.1表的导出 (20) 2.4.2 Dmp导出参数介绍 (23) 2.4.2 表的导入 (24) 四 .其它操作 (27) 1.SQL美化 (27)

一 .登录PL/SQL Developer 1.1 登录PL/SQL Devel oper (1)登录4要素 a. 用户名(username) b. 密码(password) c. 数据库服务名(Database) d. 连接身份(Connect as) (2)要素说明 ●用户名(username)和密码(password):即数据库登录用户和登录密码,由 数据库管理员提供 ●数据库服务名(Database):数据库服务名可在下拉列表中选择(由 tnsnames.ora文件中描述的名字来确定),前提是通过Net Configuration Assistant来配置,或者直接修改tnsnames.ora文件。 ●连接身份(Connect as):若为一般用户,默认为normal即可;若为sys或

实验1 ORACLE基本操作-使用SQL DEVELOPER

实验1 ORACLE 基本操作 实验目的:掌握ORACLE的连接,了解ORACLE的数据库结构;熟悉PLSQL/Developer图形化管理工具的使用。 实验内容: 一、机房环境的准备工作(每次重新启动机器后必做的工作) 为了能启动ORACLE并利用图形化的管理工具PLSQL/Developer对ORACLE数据库进行操作,在机房的机器中要先做如下的准备工作: 1、查看自己的机器名 方法:右击“我的电脑”→“属性”,找到并记住自己的计算机名 2、修改监听程序 方法:“开始”→“所有程序”→“Oracle-OraDb11g_home1”→“配置和移植工具”→“Net Manager”,在弹出的窗口中展开目录至最后的“LISTENER”,在右侧的窗口中将主机名改成自己的主机名→单击窗口右上角的红色叉号按钮关闭→在弹出的对话框中选择“保存”。

3、启动服务 右击“我的电脑”→“管理”→“服务和应用程序”→“服务” 找到并按顺序启动如下两个服务: 。 启动顺序:先启动,再启动 启动方法:右击服务名选择“启动” 注:当在自己的机器上使用时,这两个服务若显示已启动则不用重新再启动。 二、运行SQL Developer,建立与ORACLE数据库的连接 1、运行Oracle自带的SQL Developer软件 方法:“开始”→“所有程序”→“Oracle-OraDb11g_home1”→“应用程序开发”→“SQL Developer” 2、以system用户建立与数据库的连接 在SQL Developer窗口中选中“连接”→点击“新建”按钮,

在窗口中输入以下信息,使其以system用户与数据库进行连接 注: 连接名:可以随便起 用户名:system,若以其他用户身份登录,可以在这里更改用户名 密码:123456 SID:orcl 点击“测试”按钮,若成功则在左下角显示“状态:成功”,若有错误,则会出现红色的提示信息,按信息进行问题查找。 最后点击“连接”按钮进行连接

windows 系统应用与维护

Ⅱ戊辰B:windows 系统应用与维护(5%) 4+13+7 单选; 1.Windows将整个计算机显示屏幕看作是()。C A.工作台B.窗口C.桌面D.背景 2.Excel中的工作簿是(D)。 A.一本书 B.一种记录 C.一张表 D. 由工作表组成的文档 3.下面对E-Mail的描述中,只有(d )是正确的。 (A)不能给自己发送E-Mailb (B)一封E-Mail只能发给一个人 (C)不能将E-Mail转发给他人(D)一封E-Mail能发送给多个人 4.从E-Mail服务器中取回来的邮件,通常都保存在客户机的( b)里。 (A)发件箱(B)收件箱(C)已发送邮件箱(D)已删除邮件箱 5、我行网银系统共由多少台设备组成(B) A、30 B、66 C、64 D、13 6、我行网银系统由多少种硬件设备组成(A) A、18 B、17 C、16 D、15 7、我行网银系统网络结构共分多少个区域(C) A、4 B、5 C、7 D、6 8、我行网银系统设计最大寿命为多少年(A) A、8 B、7 C、6 D、5 9、我行网银系统防止暴力破解密码的措施为(A) A、输入5次密码错误以后,系统自动冻结账号一天

B、访问控制列表 C、将账户删除 D、无保护措施 10.以下哪个软件不是信管系统日常开发维护时的常用软件( D ) A.tomcat B.plsql C.myeclipse D.ESET 11.以下哪个是信管系统的正确地址( B ) A.http://16.3.1.75:7001/console B.http://16.3.1.75/credit C.http://16.3.1.75/ICRWeb D.http://16.3.1.75/ECRWeb 12.以下哪个是企业征信系统的正确地址( D ) A.http://16.3.1.75:7001/console B.http://16.3.1.75/credit C.http://16.3.1.75/ICRWeb D.http://16.3.1.75/ECRWeb 13.以下哪个是个人征信系统的正确地址( D ) A.http://16.3.1.75:7001/console B.http://16.3.1.75/credit C.http://16.3.1.75/ICRWeb D.http://16.3.1.75/ECRWeb 14.关于信管系统浏览器配置说法错误的是( D ) A.需要安装ActiveX控件 B.启用下载未签名的ActiveX控件项 C.禁用弹出窗口阻止程序项,并要把网址添加到可信站点中 D.以上说法都是错误的 15.Windows中安装相应的应用软件,通过控制面板中的( C )控件完成。 A、系统B、添加新硬件 C、添加/删除程序D、多媒体 16.在WINDOWSXP中,若鼠标指针变成“I”形状,则表示( D ) A、当前系统正在访问磁盘B、可以改变窗口的大小 C、可以改变窗口的位置D、鼠标指针出现处可以接收键盘的输入 17.不能利用WINDOWSXP资源管理器直接完成的任务是( C ) A、删除文件B、新建文件夹C、对硬盘分区D、复制文件 18.在WINDOWS XP中,使用软键盘可以快速的输入各种特殊符号,为了撤消弹出的软键盘,正确的操作是( A ) A、用鼠标左键单击软键盘上的ESC键 B、用鼠标右键单击软键盘上的ESC键 C、用鼠标右键单击中文输入法状态窗口中的软键盘按钮

Oracle常见死锁发生的原因以及解决方法

Oracle常见死锁发生的原因以及解决方法 Oracle常见死锁发生的原因以及解决办法 一,删除和更新之间引起的死锁 造成死锁的原因就是多个线程或进程对同一个资源的争抢或相互依赖。这里列举一个对同一个资源的争抢造成死锁的实例。 Oracle 10g, PL/SQL version 9.2 CREATE TABLE testLock( ID NUMBER, test VARCHAR(100) ) COMMIT INSERT INTO testLock VALUES(1,'test1'); INSERT INTO testLock VALUES(2,'test2'); COMMIT; SELECT * FROM testLock 1. ID TEST 2.---------- ---------------------------------- 3. 1 test1 4. 2 test2 死锁现象的重现: 1)在sql 窗口执行:SELECT * FROM testLock FOR UPDATE; -- 加行级锁并对内容进行修改, 不要提交 2)另开一个command窗口,执行:delete from testLock WHERE ID=1; 此时发生死锁(注意此时要另开一个窗口,不然会提示:POST THE CHANGE RECORD TO THE DATABASE. 点yes 后强制commit):

3)死锁查看: 1.SQL> select https://www.doczj.com/doc/8c7120219.html,ername,l.object_id, l.session_id,s.serial#, s.lockwait,s.status,s.machine, s.program from v$session s,v$locked_object l where s.sid = l.session_id; USER NAME SESSION_ID SERIAL# LOCKWAIT STATUS MACHINE PROGRAM 2.---------- ---------- ---------- -------- -------- ---------------------- ------------ 3.SYS 146 104 INACTIVE WORKGROUP\J-THINK PLSQLDev.exe 4.SYS 144 145 20834474 ACTIVE WORKGROUP\J-THINK PLSQLDev. exe 字段说明: Username:死锁语句所用的数据库用户; SID: session identifier,session 标示符,session 是通信双方从开始通信到通信结束期间的一个上下文。 SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。 Lockwait:可以通过这个字段查询出当前正在等待的锁的相关信息。 Status:用来判断session状态。Active:正执行SQL语句。Inactive:等待操作。Killed:被标注为删除。 Machine:死锁语句所在的机器。 Program:产生死锁的语句主要来自哪个应用程序。 4)查看引起死锁的语句:

Oracle PLSQL语言基础

Oracle PL/SQL语言基础 PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。 PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL 引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句。 PL/SQL的优点如下: . PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。 . PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型 . PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。 . 可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。 . PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的 . 对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。 PL/SQL块结构 PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分。与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分: 声明部分(Declaration section)

ape安装配置手册

A P E X安装简单的说,共分四步:1、安装O r a c l e D B APEX2.2要求Oracle DB版本为9.2.0.3或更高。注意APEX2.2不支持Oracle DB XE,如果你的数据库是Oracle DB XE,就要选用APEX2.1。我这里选用的数据库是Oracle 10.2.0.1,虽然不是目前最高的版本(最高的版本是10.2.0.1的patchset),但是已经包含了很多令人振奋的新特性了。建议 C S D N的朋友们也多使用一些O r a c l e产品的新版本,时刻保持对新技术的敏感度。 O r a c l e D B的免费下载网址为:h t t p://w w w.o r a c l e.c o m/t e c h n o l o g y...r a c l e10g/i n d e x.h t m l 注意:不要用下载的软件从事有任何商业目的的活动。 下载之后开始安装,步骤非常简单。你可以选择在安装的同时创建一个数据库,或者在安装结束后用DBCA 创建一个数据库,最好将数据库的字符集设为AL32UTF8(如果你想让你的数据库支持多种语言,请选用AL32UTF8;否则可以考虑使用一种native本地的字符集,比如ZHS16GBK)。这里我创建了一个service n a m e为t i n a03.c n.o r a c l e.c o m(S I D为t i n a03)的数据库。安装结束后,打开services(服务)窗口,你可以看到里面多了数个oracle的服务,其中包括我们需要的OracleServiceTINA03和OracleOraDb10gTNSListener,其他的服务都可以停掉且设为手动启动。 2、安装O r a c l e H t t p S e r v e r APEX2.2是需要部署到Oracle Http Server上的,它所以能运行主要是依赖于mod_plsql这个模块。下面这三个系列的产品可以满足需要:

PLSQL编程基础

淮海工学院计算机工程学院实验报告书 课程名:《大型数据库概论》 题目:PL/SQL编程基础 班级:********* 学号:*********** 姓名:**********

实验2 PL/SQL编程基础 实验目的 1.掌握PL/SQL基础,包括PL/SQL语句块、变量、常用数据类型、运算符和表达式。 2. 掌握PL/SQL控制结构,包括顺序、选择、NULL和循环四种结构及GOTO语句。 3. 掌握PL/SQL中游标的使用方法。 4. 掌握SQL *Plus和Worksheet开发环境的使用方法。 实验环境 局域网,windows 2003 实验学时 2学时,必做实验。 实验内容 1. 编写一个PL/SQL程序块,计算100以内的奇数和。 2. 编写PL/SQL块计算并输出S=1!+2!+…+10!。 3.编写一个PL/SQL块用于计算两个正整数的最大公约数。 4.编写一个PL/SQL程序块,使用游标对一个数据库表中的数据进行查询。 实验步骤 1、选择“开始”→“所有程序”→Oracle-OraHome92→Application Development→SQL Plus 2、系统出现“登录”对话框。输入用户名为“scott”、口令为“tiger”、主机字符串 为“school”。 3、单击“确定”按钮,出现“SQL *Plus的工作窗口”。 4、编写PL/SQL程序。 4.1、编写一个PL/SQL程序块,计算100以内的奇数和。 set serveroutput on; declare p integer; m integer; n integer; begin m:=2; n:=0; for p in 1..100 loop if p mod m<>0 then n:=n+p; end if; end loop;

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识 很久以前自己整理的PLSQL一些基础知识,翻出来看看都是比较基础的内容,还是放上来好了。参考的资料是《PL/SQL用户指南与参考》中译版,觉得这是一部很不错的入门书,感谢把这本书翻译出来的网友。 1、乘方的不同应用: 在SQL中乘方只能使用函数Power(a,b)来计算 但在PLSQL中可直接使用a**b表示 2、赋值语句Returning: insert into t1 values(90,'SERVICE','BEIJING') Returning rowid,name into row_id,info; 注:只限insert、update、delete一条记录时进行赋值 3、自定义参数——&: 可SQL和PLSQL中均可使用自定义参数,即需要自己输入值的参数 select * from ldcom where comcode=&a andname=&b; PLSQL: declare i int := &a; n int := &b; 4、绑定变量的使用: 可使用绑定变量的办法提高SQL效率 SQL> variable x number ; SQL> exec :x := 8600 ; SQL> select * from ldcom where comcode= :x ; 注:PLSQL中的declare即隐士绑定,无需再申明

可用Print查看绑定变量 SQL> print x; 也可使用查询SQL> select :x from dual; 实际的简单应用: variable x number; declare v_date date; begin for i in1.. 10loop :x := i; select sysdate+:x into v_date from dual; dbms_output.put_line(v_date); end loop; end; / 在execute immediate中的应用: declare v_x t1.num%type; begin execute immediate'update t1 set num=8888 where id=:a returning num into :b' using2returning into v_x; dbms_output.put_line(v_x); end; 注意returning的返回值在动态SQL中的操作格式 5、%TYPE和%ROWTYPE的区别: %TYPE针对某一字段类型(数组也是单一的类型) %ROWTYPE针对某一整表的类型(游标也是整表)

Oracle11g自带的SQL developer无法打开解决方案

在安装完Oracle Database 11g Release 2数据库,想试一下Oracle自带的SQL Developer 工具,在操作系统菜单的所有程序中找到SQL Developer如下所示,并单击: 结果却提示缺少快捷方式,没找到“SQLDEVELOPER.BAT”,如下所示:

在Oracle的安装目录 D:\DataBaseInstall\Oralce_11g_r2\product\11.2.0\dbhome_1\sqldeveloper\sqldeveloper\ bin下的确也没找到sqldeveloper.bat文件。网上很多人都说重新下载SQL Developer替换掉安装Oracle时自带的那个。 重新到Oracle官网下载SQL Developer,当前最新版下载地址: https://www.doczj.com/doc/8c7120219.html,/otn/java/sqldeveloper/sqldeveloper64-3.2.20.09.87-no-jre.zip 将下载下来的sqldeveloper64-3.2.20.09.87-no-jre.zip解压到Oracle安装目录下

这时重新单击操作系统菜单中的“SQL Developer”,看到命令窗口闪一下就消失了。看了一下SQL Developer的“readme.html”文档知道了SQL Developer 3.2支持的Java版本至少要1.6.0_04。

那就下载当前最新JDK安装,在这里我下载的是 jrockit-jdk1.6.0_37-R28.2.5-4.1.0-windows-x64.exe。下载完成后双击出现如下安装界面:

最新PLSQL+Developer工具的使用(非常详细)

PLSQL Developer工具的使用 1 2 PLSQL Developer的安装十分简单,先安装PL.SQL.Developer.exe文件,3 然后安装chinese.exe文件进行汉化。安装成功后在桌面点击PLSQL Developer 4 的快捷方式进入登录页面(如图1)。 5 6 图1 7 输入用户名和口令,选择好要连接的数据库,点击“确定”登录成功(如8 图2)。

9 10 图2 11 在成功登录后会进入到PLSQL Developer的操作界面(如图3)。 12 13 图3 14 用户可以在左边下拉菜单中选择“我的对象”,然后点击“Table”可以

15 显示出项目所涉及的数据库中所有表(如图4)。 16 17 图4 18 新建表,点击Table文件夹,然后点击鼠标右键在列表中选择“新建” 19 选项进入到创建新表的页面(如图5),用户可以根据自己的需要来创建新表,20 但一定要遵循Oracle规范 21 信息填写完毕后点击“应用”按钮创建成功。

22 23 图5 24 修改表结构,可以选中要该表后点击鼠标右键在列表中选择“编辑”选项25 进入到修改表结构的页面(如图6),这里显示的都是该表的结构信息,如要进26 行修改操作请根据实际情况慎重修改,修改后点击“应用”按钮提交修改内容。 27 28 图6

29 修改表名,可以选中要该表后点击鼠标右键在列表中选择“重新命名” 30 选项进入到重新命名的页面(如图7),这里需要注意的是表名起的一定要有意31 义。 32 33 图7 34 查询表结构,可以选中要该表后点击鼠标右键在列表中选择“查看”选项35 进入到查看表结构的页面(如图8)。

查询oracle表空间路径

ORACLE查看表空间路径、当前用户的表空间等 查看当前用户每个表占用空间的大小: Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name 查看每个表空间占用空间的大小: Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)0、表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 查看用户下所有的表 SQL>select * from user_tables; 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 显示当前会话所具有的权限 SQL>select * from session_privs; 显示指定用户所具有的系统权限

PLSQL 快捷键设计以及添加快捷键

PL/SQL 快捷键 1 修改Code assistant快捷键 tools->preferences->User Interface -> Key Configuration -> tools/ code assistant 改为自己想要的快捷键 tools -> code assistant 可以查看帮助的快捷键 2 修改Sql 语句大小写 默认pl/sql 没有提供快捷键 选中sql,点击edit --> selection --> Uppercase 当然了也可以按照1来增加快捷键 tools->preferences->User Interface -> Key Configuration --> edit/selection/Uppercase 改为自己想要的快捷键 使用PL/SQL中经常性需要输入select * from 这样类似的语句。能不能配置一个快捷键,比如输入s,直接就显示select * from 呢?显然PL/SQL是支持该功能的。 在PL/SQL的安装目录下面:$:\Program Files\PLSQL Developer\PlugIns 中添加一个文本文件,比如命名为:shortcuts.txt。文本文件中填写如下内容: s = select * from 打开PL/SQL,在Tools->Perferences->Editor中Autoreplaces选择配置的shortcuts文件。如下图:

确定后重启PL/SQL就可以了。在编辑页面,输入s 就会显示select * from 附录:个人编写文件内容: s=select * from ; st = select t.* ,t.rowid from t ; sf = select a.* from a ; d = delet e from where ; u = update a set a. where a. ; w = where ; dbs=dbms_output.put_line('); 应用时,快捷键+回车就可以出现了!

oracle的TM锁、TX锁知识完全普及

oracle的TM锁、TX锁知识完全普及 锁概念基础 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X 锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。 Oracle数据库的锁类型 根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data locks,数据锁),用于保护数据的完整性;DDL锁(dictionary

locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and latches),保护数据库的内部结构。 DML锁的目的在于保证并发情况下的数据完整性,。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。 当Oracle 执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X 等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。 在数据行上只有X锁(排他锁)。在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行 DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。 当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失

一个ORACLE被重启后报ora-12514的问题

首先,也没什么,主要写给广大在现场当炮灰的实施同事们。希望有意见的提意见,有想法的提想法。ORACLE的问题,一向都是我们的弱项,希望我们一同努力,分享所知,所学,所经验…… 下面正式 --------------------------分割线---------------------------------- 问题来源:泰州惩防平台 问题描述:就在前天小季遇到了这个样的一个问题: ORACLE 服务正常重启后,发现登录不进去了,重启之前十分健康,也没做什么多余的操作,具体如图。 通过services控制台重启ORACLE 重启正常。 但是PLSQL不能登录了。报错:12514。

解决过程: 其实小季求助于我的时候,已经百度谷歌了12514的解决办法,尝试了网上的解决方案,是没有效果的。 Iteye上有报错的几个原因:Oracle-12514错误发生的几种原因 都是没有效果。 问我,也不知道该怎么办,我能先想到的是,重启服务器。心里想:既然没有动什么,是不是系统环境改了什么导致的。结果重启服务器后还是不行。 然后确定是不是客户端配置的问题,直接上服务器SQLPLUS。 结果也是12514。 该死。果真是ORACLE服务出问题了。 怎么办,既然监听有问题,就卸载了重装监听吧。我老是觉得重装比什么都好,不要管这么多了。其实我是在逃避问题。

重新配置完成。 擦!还是12514。 没办法了。难道不是监听的问题,那就是ORACLE服务的问题了。服务没有起出来吗?来吧用SQLPLUS重启下看看。 ORACLE not available是什么意思。服务没有起出来?

PLSQL语言基础

上机4 PL/SQL语言基础 上机内容 1. 程序结构 2. 流程控制 3. 异常处理 4. 开发动态SQL 上机目标 1. 掌握PL/SQL程序结构 2. 掌握PL/SQL流程控制 3. 掌握PL/SQL异常处理 4. 掌握PL/SQL中开发动态SQL的方法 阶段1 指导部分 训练内容 PL/SQL块程序结构中的数据类型 需求说明 在VALUES子句中使用记录变量插入数据是Oracle 9i新增的特征。在VALUES子句中使用记录变量插入数据时,列的顺序、个数、类型必须与记录成员的顺序、个数、类型完全匹配,如图2.4.1所示。

在VALUES子句 中使用记录变量 图2.4.1 在VALUES子句中使用记录变量 另外,从Oracle 9i开始,在SET子句中不仅可以使用记录成员,而且还可以直接使用记录变量。当在SET子句中使用记录变量更新数据时,列的顺序、个数、类型必须与记录成员的顺序、个数、类型完全匹配。现要求实现:由用户输入部门编号,通过在SET子句中使用记录变量的方式来修改指定部门信息。 实现思路 定义一个关于DEPT部门表的%ROWTYPE变量,让用户通过替换变量给其中的deptno部门编号赋值,通过UPDATE语句进行更新,如图2.4.2所示。

注意使用 ROW关键字 图2.4.2 在SET子句中使用记录变量 练习部分(一) 需求说明 索引表(TABLE)类型不仅可以在PL/SQL中直接使用,也可以作为表列的数据类型使用。在表列中使用索引表类型时,必须首先使用CREATE TYPE命令创建索引表类型。需要注意的是,当使用索引表类型作为列的数据类型时,必须为索引表列指定专用的存储表。例如,需要存储一个会员(TB_VIPInfo)信息时,需要记录该会员的联系方式,但该会员的联系方式可能有多个,因此可以考虑在记录会员联系方式的列上使用索引表。创建一个关于会员信息表,并使用索引表类型作为该表中的某列,如图2.4.3所示。

PLSQL使用方法

1.1PLSQl远程连接oracle数据库 1.1.1配置tnsnames.ora 路径:X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client\tnsnames.ora tnsnames.ora配置: orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl) ) ) 其中HOST为主机IP地址,红色字体处 PORT为oracle开放端口号 SERVICE_NAME为连接数据库名字,蓝色字体处 *此配置参数可以配置多个,也就是可以配置多个连接字符串(全局名称) 1.1.2添加连接环境变量 变量名:TNS_ADMIN 变量值:X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client 1.1.3添加ORACLE的语言环境变量: 变量名:NLS_LANG 变量值:AMERICAN_AMERICA.ZHS16GBK(设置ORACLE的语言) 重新连接,即可正常显示中文。 如果想转换为UTF8字符集,可以赋予"NLS_LANG"为"AMERICAN_AMERICA.UTF8",其他编码同上

1.1.4下载并安装PL.SQL.Developer,配置应用: 配置tools->preferences->connection PLSQL 设置 Oracle Home=X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client OCI library=X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client\oci.dll 1.1.5重启plsql 再次打开plsql则会在database中有oracledata选项输入用户名密码就可以登陆。 1.2导入基础数据 1.2.1输入用户名密码登录plsql

oracle知识点整理

╔---------------------------╗ ☆2.用户管理:☆ ╚---------------------------╝ 用dos命令打开或关闭监听服务: 启动监听:lsnrctl start 停止监听:lsnrctl stop 查看监听:lsnrctl status 创建用户(create):create user用户名identified by密码;例:create user zhangsan indentified by zhangsan 修改用户密码(alter):alter user用户名identified by密码;例:alter user zhangsan identified by zhangsan1 删除用户(drop):Drop user用户名cascade例:drop user zhangsan cascade(带cascade 的删除语句可以不管用户是否拥有模式对象,连同一起删除) 用户状态管理(alter):锁定用户:alter user用户名account lock;例:alter user zhangsan account lock 解锁用户:alter user用户名account unlock;例:alter user zhangsan account unlock 权限管理 (grand,revoke): DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库 结构。 RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数 据库结构。 CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建 实体,不可以创建数据库结构 对于普通用户:授予connect, resource权限即可。 对于DBA管理用户:授予connect,resource, dba权限 权限授予:grant connect, resource, dba to用户名1 [,用户名2]... 权限回收:Revoke connect, resource from用户名 实体权限分类:select, update, insert, alter, index, delete, all //all包括 所有权限 execute//执行存储过程权限 例:grant select, update, insert on product to 用户名; 例:grant all(所有权限) on product to 用户名; 更多见(Oracle用户、权限、角色管理.txt)文本 ╔---------------------------╗ ☆3.空间管理:☆ ╚---------------------------╝ 创建表空间(tablesapce): 表空间: Create tablesapce表空间名(rb_开头)datafile地址(如‘d:datafiles.dbf’) size 50M; size:表空间大小

系统的安装与配置说明书

HH-IVMSR型铁路综合视频监控系统安装与配置说明书 河南辉煌科技股份有限公司 2011年09月

目录 1文档介绍 (1) 2数据库与HH-IVMSR软件安装要求 (1) 2.1操作系统要求 (1) 2.2安装位置要求 (1) 2.3空间配置要求 (1) 2.4网络要求 (1) 3数据库安装与配置 (1) 3.1数据库简介 (1) 3.2数据库安装 (1) 3.2.1客户端安装 (1) 3.2.2服务端安装 (2) 3.3数据库配置 (4) 3.4导入数据模板............................................................ 错误!未定义书签。4HH-IVMSR软件安装与配置.. (9) 4.1HH-IVMSR软件简介 (9) 4.2管理终端配置 (9) 4.2.1系统管理 (10) 4.2.2设备管理 (12) 4.2.3绑定管理 (14) 4.2.4用户管理 (18) 4.2.5权限管理 (19) 4.3服务器配置 (20) 4.3.1管控服务器配置.............................................. 错误!未定义书签。 4.3.2应用服务器配置 (21) 4.3.3存储服务器配置.............................................. 错误!未定义书签。 4.3.4转发服务器配置.............................................. 错误!未定义书签。 4.3.5监控终端配置 (23) 5服务器运行 (24)

相关主题
文本预览
相关文档 最新文档