Oracle_DML
精通 oracle 10g plsql 编程-学习笔记
1. PL/SQL综述
本章学习目标,了解如下内容:
PL/SQL的功能和作用
PL/SQL 的优点和特征;
Oracle 10g、Oracle9i 的PL/SQL新特征
1.1. SQL简介
1.1.1. SQL语言特点
SQL语言采用集合操作方式
1.1.2. SQL语言分类
数据查询语言(SELECT语句):检索数据库数据。
数据操纵语言(DML):用于改变数据库数据。包括insert,update和 delete三条语句。
事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句
数据定义语言(DDL):用户建立、修改和删除数据库对象。
数据控制语言(DDL):用于执行权限授予和收回操作。包括grant 和revoke两条命令。
1.1.3. SQL 语句编写规则
SQL关键字不区分大小写
对象名和列名不区分大小写
字符值和日期值区分大小写
书写格式随意
1.2. PL/SQL简介
1.3. Oracle 10G PL/SQL 新特征
2. PL/SQL开发工具
本章学习目标:
学会使用SQL*PLUS
学会使用 PL/SQL developer;
学会使用 Procedure Builder。
2.1. SQL*PLUS
在命令行运行SQL*Plus Sqlplus [username]/[password] [@server]
3. PL/SQL 基础
学习目标:
了解PL/SQL块的基本结构以及PL/SQL块的分类;
学会在PL/SQL块中定义和使用变量
学会在PL/SQL块中编写可执行语句;
了解编写PL/SQL代码的指导方针;
了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。
3.1. PL/SQL 块简介
oracle存储过程学习语法实例调用
Oracle 存储过程学习
目录
Oracle存储过程基础知识
商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程;
存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应用程序中移动到数据库;这样的结果就是,代码存储一次但是能够被多个程序使用;
要创建一个过程对象procedural object,必须有 CREATE PROCEDURE 系统权限;如果这个过程对象需要被其他的用户schema 使用,那么你必须有 CREATE ANY PROCEDURE 权限;执行
procedure 的时候,可能需要excute权限;或者EXCUTE ANY PROCEDURE 权限;如果单独赋予权限,如下例所示:
grant execute on MY_PROCEDURE to Jelly
调用一个存储过程的例子:
execute MY_PROCEDURE 'ONE PARAMETER';
存储过程PROCEDURE和函数FUNCTION的区别;
function有返回值,并且可以直接在Query中引用function和或者使用function的返回值;
本质上没有区别,都是 PL/SQL 程序,都可以有返回值;最根本的区别是: 存储过程是命令,
而函数是表达式的一部分;比如:
select maxNAME FROM
但是不能 exec maxNAME 如果此时max是函数;
PACKAGE是function,procedure,variables 和sql 语句的组合;package允许多个procedure使用同一个变量和游标;
创建 procedure的语法:
CREATE OR REPLACE PROCEDURE schema.procedure
argument IN | OUT | IN OUT NO COPY datatype , argument IN | OUT | IN OUT NO COPY datatype...
oracle中的insert语句
oracle中的insert语句
oracle中的insert语句
关键字: ORACLE insert into tableoracle中的insert语句
在oracle中使⽤DML语⾔的insert语句来向表格中插⼊数据,先介绍每次只能插⼊⼀条数据的语法INSERT INTO 表名(列名列表) VALUES(值列表);
注意:
当对表中所有的列进⾏赋值,那么列名列表可以省略,⼩括号也随之省略必须对表中的⾮空字段进⾏赋值
具有默认值的字段可以不提供值,此时列名列表中的相应的列名也要省略
举例:有如下表格定义create table book(bookid char(10) not null , name varchar2(60),price number(5,3))
使⽤下⾯的语句来插⼊数据INSERT INTO BOOK(bookid,name,price) VALUES('100123','oracle sql',54.70);
INSERT INTO BOOK VALUES('100123','oracle sql',54.70);
INSERT INTO BOOK(bookid) VALUES('100123');
由于bookid是⾮空,所以,对于book来说,⾄少要对bookid进⾏赋值,虽然这样的数据不完整
如果想往⼀个表格中插⼊多条数据,那么带有values⼦句的insert就不⾏了,这时候必须使⽤insert语句和select语句进⾏配合来实现同时插
⼊多条数据:
例如:现在有⼀个空表a和⼀个有数据的表格b,他们的结构是⼀样, 把b表中的所有数据插⼊到a表中的语句是:INSERT INTO A (列1,列2,列3)
SELECT 列1,列2,列3
FROM B ;
--查询语句中可以使⽤任意复杂的条件或者⼦查询
如果数据的来源不是现存表的数据,也想多条插⼊那么使⽤如下的⽅法:INSERT INTO tablename(列1,列2,列3,)
oracle存储过程executeimmediate用法
oracle存储过程executeimmediate用法
Oracle中的EXECUTE IMMEDIATE是用来动态执行SQL语句的一种方法。它允许在程序运行时构造和执行SQL语句,而不是在编译时确定。
EXECUTEIMMEDIATE语句的语法如下:
EXECUTE IMMEDIATE dynamic_sql_statement INTO variable1 [,
variable2, ...];
dynamic_sql_statement是要执行的SQL语句,可以是任何合法的SQL语句,包括DML语句(INSERT、UPDATE、DELETE)、DDL语句(CREATE、ALTER、DROP)和PL/SQL块。
INTO子句是可选的,用于将执行结果保存到变量中。如果SQL语句返回多个值,需要在INTO子句中提供相应数量的变量。
下面是一些使用EXECUTEIMMEDIATE的实例:
1.执行一个简单的SELECT语句,并将结果保存到变量中:
```PL/SQL
DECLARE
l_value NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM employees' INTO
l_value;
DBMS_OUTPUT.PUT_LINE('Total employees: ' , l_value); END;
```
2.动态创建一个表并插入数据:
```PL/SQL
DECLARE
l_table_name VARCHAR2(30) := 'EMPLOYEES_NEW';
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE ' , l_table_name , ' (id
NUMBER, name VARCHAR2(100))';
EXECUTE IMMEDIATE 'INSERT INTO ' , l_table_name , ' VALUES
Oracle死锁的查看以及解决办法
Oracle死锁的查看以及解决办法
1、查看死锁是否存在
select username,lockwait,status,machine,program from v$session where sid in
(select session_id from v$locked_object);
Username:死锁语句所⽤的数据库⽤户;
Lockwait:死锁的状态,如果有内容表⽰被死锁。
Status: 状态,active表⽰被死锁
Machine: 死锁语句所在的机器。
Program: 产⽣死锁的语句主要来⾃哪个应⽤程序
2、查看死锁的语句
select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object));
3、死锁的解决办法
1)查找死锁的进程:
sqlplus "/as sysdba" (sys/change_on_install)
SELECT ername,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
2)kill掉这个死锁的进程:
alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果还不能解决:
select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;
其中sid⽤死锁的sid替换: exitps -ef|grep spid
oracleparallel用法
Oracle Parallel用法
介绍
Oracle Parallel是Oracle数据库提供的一种功能,可以使数据库的查询和操作在多个处理单元上并行执行,从而提高性能和吞吐量。本文将详细探讨Oracle
Parallel的用法,包括如何配置和使用。
配置
1. 首先,确保数据库的版本满足Oracle Parallel的要求。从Oracle
Database 11g开始,Oracle Parallel就内置在数据库中。
2. 确认数据库是否已启用并行功能。可以通过执行以下查询语句来检查:
SELECT * FROM v$option WHERE parameter = 'Parallel Server'
3. 如果Parallel Server参数的值为TRUE,则表示数据库已启用并行功能。如果为FALSE,则需要在数据库初始化参数文件中启用并行功能。可以使用文本编辑器打开参数文件,找到以下行并编辑之:
parallel_max_servers=16
4. 在上述示例中,16是并行服务器的数量,可以根据实际需求进行调整。修改完成后,保存参数文件并重启数据库。
使用
并行查询
并行查询是使用Oracle Parallel最常见的用法之一。通过并行查询,可以将一个大型查询任务分割成多个子任务,并在多个处理单元上并行执行,从而加快查询速度。以下是使用并行查询的步骤:
1. 创建并行查询的表。在创建表时,可以使用PARALLEL关键字指定并行属性:
CREATE TABLE employees (
id NUMBER,
name VARCHAR2(50),
age NUMBER
) PARALLEL; 2. 设置并行度。并行度决定了同时执行查询的并行进程数量。可以通过ALTER
TABLE语句来设置并行度:
ALTER TABLE employees PARALLEL(DEGREE 4);
Oracle 10g Shrink Table和Shrink Space使用详解
Oracle 10g
Shrink Table的使用是本文我们主要要介绍的内容,我们知道,如果经常在表上执行DML操作,会造成数据库块中数据分布稀疏,浪费大量空间。同时也会影响全表扫描的性能,因为全表扫描需要访问更多的数据块。从Oracle 10g开始,表可以通过shrink来重组数据使数据分布更紧密,同时降低HWM释放空闲数据块。
segment shrink分为两个阶段:
1、数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement.同时要disable基于rowid的trigger.这一过程对业务影响比较小。
2、HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁,会造成表上的所有DML语句阻塞。在业务特别繁忙的系统上可能造成比较大的影响。Shrink
Space语句两个阶段都执行。Shrink Space compact只执行第一个阶段。
如果系统业务比较繁忙,可以先执行Shrink Space compact重组数据,然后在业务不忙的时候再执行Shrink Space降低HWM释放空闲数据块。shrink必须开启行迁移功能。
alter table table_name enable row movement ;
注意:alter table XXX enable row movement语句会造成引用表XXX的对象(如存储过程、包、视图等)变为无效。执行完成后,最好执行一下utlrp.sql来编译无效的对象。
语法:
1. alter table shrink space [ | compact | cascade ];
2. alter table shrink space compcat;
oracle练习题及答案
oracle练习题及答案(总7页)
--本页仅作为文档封面,使用时请直接删除即可--
--内页可以根据需求调整合适字体及大小-- 试题一
一、填空题(每小题4分,共20分)
1、数据库管理技术经历了___人工管理、文件系统、数据库系统__三个阶段
2、数据库三级数据结构是:外模式、模式、内模式
3、Oracle数据库中,SGA由_数据库缓冲区,重做日志缓冲区,共享池
组成
4、在Oracle数据库中,完正性约束类型有:Primay key约束。Foreign key约束,Unique约束,check约束,not need约束
5、PL/SQL中游标操作包括:声明游标,打开游标,提取游标,关闭游标
二、正误判断题(每小题2分,共20分)
1、数据库中存储的基本对象是数据(T)
2、数据库系统的核心是DBMS(T)
3、关系操作的特点是集合操作(T)
4、关系代数中五种基本运算是并、差、选择、投影、连接(F)
5、Oracle进程就是服务器进程(F)
6、oraclet系统中SGA所有用户进程和服务器进程所共享(T)
7、oracle数据库系统中数据块的大小与操作系统有关(T)
8、oracle数据库系统中,启动数据库和第一步是启动一个数据库实例(T)
9、PL/SQL中游标的数据是可以改变的(F)
10、数据库概念模型主要用于数据库概念结构设计(T)
三、简答题(每小题7分,共35分)
1、何谓数据与程序的逻辑独立性和物理独立性
2、试述关系代数中等值连接与自然连接的区别与联系
3、何谓数据库,数据库设计一般分为哪些阶段
4、简述Oracle逻辑数据库的组成 5、试任举一例说明游标的使用方法
五、设有雇员表emp(empno,ename,age,sal,tel,deptno),
其中:empno-----编号,name------姓名,age -------年齡,sal-----工资,tel-----电话
oracle基础
第1章OraCIe 9i基础
1.1关系型数据库系统简介
111什么是关系型数据
关系型数据是以关系数学模型来表示的数据。关系数学模型中以二维表的形式来描述数据,
如表1.1和表1.2所示。
表Ll研究生信息二维表
学号 姓名 专业 导师编号
王海 计算机安全
李东 软件工程
表1.2导师信息二维表
编号 姓名 职称 职务
刘阳 博导 室主任
海涛 硕导 系主任
1.1.2什么是关系型数据库
L什么是主码(主键)
能够唯一表示数据表中的每个记录的【字段】或者【字段】的组合就称为主码。
2.什么是外码(外键)
表1.2的【编号】字段和表1.1的【导师编号】字段是对应的。表1.2中的【编号】字段是表
1.2的主码。表1.2中的【编号】字段又可以称为是表1.1的外码。
1.1.3什么是关系型数据库系统
一个完整的关系型数据库系统包含5层结构,如图U所示。 图1.1关系型数据库系统的层次结构
1 .硬件
硬件指安装数据库系统的计算机,包括两种。
服务器
客户机
2 .操作系统
操作系统指安装数据库系统的计算机采用的操作系统。
3 .关系型数据库管理系统、数据库
关系型数据库是存储在计算机上的、可共享的、有组织的关系型数据的集合。关系型数据 库管理系统是位于操作系统和关系型数据库应用系统之间的数据库管理软件。
4 .关系型数据库应用系统
关系型数据库应用系统指为满足用户需求,采用各种应用开发工具(如VB、PB和DelPhi 等)和开发技术开发的数据库应用软件。
5 .用户
6 户指与数据库系统打交道的人员,包括如下3类人员。
最终用户
数点库应用系统开发员
数据库管理员
113什么是关系型数据库管理系统
1 .数据定义语言及翻译程序DDL
2 .数据操纵语言及编译(解释)程序DML
3 .数据库管理程序1.2 网络关系型数据库的代表OraCIe 9i
1.2.1 Oracle 9i数据库
1 .企业片反(Enterprise Edition)
Oracle存储过程(表)无法编译被锁住解决办法
可用SYS登录,然后查询如下语句:
查找存储过程OPERATIONDATA_IMP被哪些session锁住而无法编译
存储过程:select * FROM dba_ddl_locks where name =upper('OPERATIONDATA_IMP');
查找表被哪些session锁住而无法编译
表:select * FROM dba_dml_locks where name =upper('表名');
从而得到session_id,然后通过
select t.sid,t.serial# from v$session t
where t.sid=&session_id;
得到sid和serial#
最后用alter system kill session 'sid,serial#'; kill 相关session即可。
