Oracle_SQL学习笔记

合集下载

Oracle数据库学习笔记_Oracle添加主键primarykey的四种方法

Oracle数据库学习笔记_Oracle添加主键primarykey的四种方法

Oracle数据库学习笔记_Oracle添加主键primarykey的四种⽅法创建主键oracle主键添加语句通常紧跟在建表语句之后,也可以直接嵌在列声明⾥创建,oracle创建主键时会⾃动在该列上创建索引。

常见⽅法⼤概有以下5种:⽅法⼀、使⽤add constraint ⽅法添加主键约束alter table 表名 add constraint 主键名 primary key (列名1,列名2,...)⽅法⼆、使⽤索引创建主键(和⽅法⼀没有区别,可以将⽅法⼀理解为省略了using index)alter table 表名 add constraint 主键名 primary key (列名1,列名2,...)using index [index_name];当省略using index后⾯的index_name时,创建主键的同时创建同名索引;当使⽤已有索引index_name创建主键时,注意索引列和主键列应该相同才能创建成功。

⽅法三、直接添加主键alter table 表名 add primary key (列名1,列名2,...) ;同样,创建主键的同时创建同名索引。

⽅法四、参数列内添加主键create table ALERT_RESULT_EVENT_C(data_date VARCHAR2(8) not null,object_id VARCHAR2(600) not null,event_id VARCHAR2(20) not null,ratio NUMBER(22,4),pairing_object_id VARCHAR2(128),index_value_1 VARCHAR2(128),index_value_2 VARCHAR2(128),constraint PK_ALERT_RESULT_EVENT_C primary key (DATA_DATE, OBJECT_ID, EVENT_ID));删除主键alter table 表名 drop primary key ;采⽤该语句删除主键时,同名索引也会被删掉。

精通 oracle 10g plsql 编程-学习笔记

精通 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*PlusSqlplus [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 块简介3.1.1.PL/SQL块结构3.1.2.PL/SQL 块分类匿名块命名块子程序触发器3.2. 定义并使用变量3.2.1.标量变量3.2.2.复合变量3.2.3.参照变量3.2.4.LOB 变量3.2.5.非PL/SQL 变量3.3.编写 PL/SQL 代码3.3.1.PL/SQL 词汇单元分隔符标识符文本(数字文本,字符文本,字符串文本,布尔文本,日期时间文本)注释3.3.2.PL/SQL 代码编码规则标识符命名规则大小写规则代码缩进嵌套块和变量范围PL/SQL中可以使用的SQL函数4.使用SQL语句学习目标:学会使用SELECT语句去完成基本查询功能学会使用INSERT,UPDA TE和DELETE语句去操作数据库数据学会使用COMMIT,ROLLBACK和SA VEPOINT语句去控制事务学会使用SELECT语句去实现各种复杂查询功能(数据分组、连接查询、子查询、层次查询、合并查询等)4.1.使用基本查询处理NULL:函数nvl(expr1,expr2),nvl2(expr1,expr2,expr3)4.2.使用DML语句使用多表插入数据语法:INSERT ALL insert_into_clause [value_clause] subquery;INSERT conditional_insert_clause subquery;示例1:使用ALL 操作符执行多表插入INSERT ALLWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSelect * from emp;示例2:使用FIRST 操作符执行多表插入INSERT FIRSTWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSELECT * FROM emp;4.3.使用事务控制语句4.3.1.事务和锁4.3.2.提交事务4.3.3.回退事务设置保存点:savepoint a;或者exec dbms_transaction.savepoint(‘a’)取消部分事务Rollback to a;或者Exec dbms_transaction.rollback_savepoint(‘a’)取消全部事务:Rollback; 或者exec dbms_transaction.rollback() 4.3.4.只读事务4.3.5.顺序事务4.4.数据分组4.4.1.分组函数MaxMinAvgSumCountVarianceStddev使用分组函数注意事项:●当使用分组函数时,除了函数Count(*) 之外,其他分组函数都会忽略NULL行。

Oracle数据库学习笔记_CREATETABLE和INSERTINTO的高级用法

Oracle数据库学习笔记_CREATETABLE和INSERTINTO的高级用法
请尝试更换浏览器或网络环境
Oracle数据库学习笔记 _CREATETABLE和 INSERTINTO的高级用 法
1、新建表 create table ACCT_LOAN (
data_date INTEGER not null, --整数,也可以约束数字最大位数,不可为空 acct_num VARCHAR2(35) not null, --可变长度的字符串(包含数字。字母及特殊字符) curr_cd CHAR(3), --固定长度为3的字符串(可包含数字,字母及特殊字符) drawdown_dt DATE, --日期 loan_amt decimal(8,2) --小数,小数最大长度为8位,小数位固定为2位 ) 2、建备份表 create table 备份表名 as select * from 表名; 3、将两张相同结构的表合并在一起 insert into 表1 select * from 表2 where ...; commit; 4、更新表:merge into merge into 表1 using 表2 on (表1.字段=表2.字段) when matched then update set ... when not matched then insert values(表2.xx, 表2.xx,...); commit; 5、给变量赋值 select into 变量名 from

韩顺平oracle学习笔记

韩顺平oracle学习笔记

韩顺平oracle学习笔记第0讲:如何学习oracle一、如何学习oracleOracle目前最流行的数据库之一,功能强大,性能卓越。

学习oracle需要具备一定基础:1.学习过一门编程语言(如:java ,c)2.最好学习过一门别的数据库(sql server,mysql , access)教程推荐:oracle使用教程,深入浅出oracle记住:欲速则不达,做任何事情要遵循他的规律,循序渐进,信心很重要成为一个oracle高手过程:理解小知识点->做小练习->把小的只是点连成线->做oracle项目->形成只是面->深刻理解Oracle基础部分:oracle基础使用; oracle用户管理; oracle表管理Oracle高级部分:oracle表的查询; oracle的函数; oracle数据库管理;oracle 的权角色; pl/sql 编程;索引,约束和事物。

期望目标:1 学会安装、启动、卸载oracle2 使用sql *plus工具3 掌握oracle用户管理4 学会在oracle中编写简单的select语句第1讲:基础语法内容介绍:1.为什么学习oracle2.介绍oracle及其公司的背景3.学会安装、启动、卸载oracle4.oracle开发工具5.Sql*plus的常用命令6.oracle用户管理一、主流数据库包括:●微软:sql server 和 access●瑞典:mysql AB公司●IBM公司:DB2●美国sybase公司:sybase●IBM公司:infromix●美国oracle公司:oracle(目前最流行的之一)二、oracle安装,启动及卸载1.系统要求:操作系统最好为windows2000内存最好在256M以上硬盘空间需要2G以上2.oracle安装会自动的生成sys和system两个用户说明:○1Sys用户是超级用户,具有最高权限,具有sysdba角色,create database 的权限,默认密码是manager○2System 用户是管理操作员,权限也很大,具有sysoper角色,没有create database权限,默认密码是 change_on_install○3一般讲,对数据库维护,使用system用户登录就可以了3.启动oracle右键单击我的电脑->服务和应用程序:服务->启动OracleServiceMYORA1(MYORA1是安装oracle时起的名字各有不同)和OracleOracleHome90TNSLlistener4.卸载oracle1、先关掉oralce,net stop OracleServiceORCL(ORCL是我的实例名字,换成你的),或者去我的电脑服务中关闭2、开始->程序->Oracle - oracle的版本号,我的是10ghome->Oracle Installation Products->Universal Installer 卸载oracle3、进注册表,regedit,删除选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下所有的key。

oracle_sql操作日志_概述及解释说明

oracle_sql操作日志_概述及解释说明

oracle sql操作日志概述及解释说明1. 引言1.1 概述Oracle SQL操作日志是一种记录数据库系统中执行的SQL语句细节和相关信息的功能。

通过启用和配置SQL操作日志,我们可以跟踪和监控数据库的操作行为,包括查询、更新和删除等操作。

这对于系统维护人员和开发人员来说非常重要,因为它们可以帮助我们理解数据库系统中发生的事情,并且在故障排查和性能优化方面提供有价值的信息。

1.2 文章结构本文将从多个方面详细介绍Oracle SQL操作日志。

首先,我们将解释SQL操作日志的含义,并阐明其在数据库系统中的作用。

接着,我们将讨论开启和配置SQL操作日志功能的方法。

然后,我们将深入探讨SQL操作日志中涉及的关键要点,如记录SQL语句执行细节的作用、日志文件保存路径和格式说明,以及使用SQL操作日志进行故障排查和性能优化的方法。

最后,在结论部分,我们将总结文章主要内容及观点,并对Oracle SQL操作日志未来的发展趋势进行展望。

1.3 目的本文旨在向读者提供关于Oracle SQL操作日志的全面概述及解释说明。

通过阅读本文,读者将了解到SQL操作日志的重要性和作用,以及如何开启和配置该功能。

此外,读者还将熟悉SQL操作日志中涉及的关键要点,并学习到使用SQL 操作日志进行故障排查和性能优化的方法。

最终,读者将对Oracle SQL操作日志有一个清晰的认识,并能够在实际工作中灵活应用该功能。

2. 正文正文部分将深入探讨Oracle SQL操作日志的概念、功能以及使用方法。

本节将具体介绍SQL操作日志的基本原理和应用场景。

2.1 Oracle SQL操作日志的基本原理在Oracle数据库中,SQL操作日志被用于记录对数据库进行的每个操作。

这些操作包括查询、更新、插入和删除等。

当用户执行一个SQL语句时,Oracle会自动将该SQL语句以及其执行结果等相关信息记录到日志文件中。

2.2 Oracle SQL操作日志的主要作用SQL操作日志起着重要的作用,尤其在故障排查和性能优化方面。

Oracle数据库学习笔记

Oracle数据库学习笔记

Oracle数据库学习笔记Oracle数据库基础 orcale属于关系型数据库,适⽤于各类⼤,中,⼩,微机环境,是⼀种⾼效率、可靠性好的、适应⾼吞吐量的数据库⽅案。

学习,实验完全免费,商⽤需要⽀付相应费⽤。

Oracle 数据库包括数据库实例,和数据库,⼆者脱离谁都没有存在的价值。

实例是⽤来操作数据库的对象,数据库是⽤来存储数据使⽤的。

Oracle主要组件包含实例组件,数据库组件。

SGA(System Global Area)是Oracle Instance的基本组成部分,PGA(Process Global Area)是为每个连接到Oracle database的⽤户进程保留的内存。

每个实例只有⼀个SGA,所有的进程都能访SGA。

PGA是程序全局区,每个⼀个进程都⼀个PGA,PGA是私有的,只有对应进程才能访问对应的PGA。

数据库中包含:参数⽂件,⼝令⽂件,数据库⽂件,控制⽂件,⽇志⽂件以及归档⽇志⽂件。

Oracle实例进场包含⽤户进程,服务器进程和后台进程。

SGA:系统全局区 系统全局区包含共享池,数据缓冲区,⽇志缓冲区。

“共享池”:是对SQL,PL/SQL程序进⾏语法分析,编译,执⾏的内存区;由库缓存和数据字典缓存组成;其⼤⼩直接影响数据库性能。

“数据缓冲区”:临时存储从数据库读⼊的数据,所有⽤户共享,数据缓存区的⽬的是加快数据读写。

“⽇志缓冲区”:⽇志记录数据库所有修改信息,其先产⽣于⽇志缓冲区,当达到⼀定数量时,由后台进程将⽇志数据写到⽇志⽂件中。

PGA:程序全局区 PGA包含单个服务器进程所需要的数据和控制信息,在⽤户进程连接到数据库并创建⼀个会话时⾃动分配的,保存每个与数据库连接的⽤户进程所需要的信息。

PGA为⾮共享区,只能单个进程使⽤,当⼀个⽤户会话结束,PGA释放。

后台进程 后台进程中包含PMON(进程监视器(Process Monitor)),SMON(系统监视器(System Monitor)),DBWR(数据库书写器(Database Write)),LGWR(⽇志书写器(Log Write)),CKPT(检查点(Checkpoint)),以及其他。

甲骨文数据库oracle个人学习(sql部分)

甲骨文数据库oracle个人学习(sql部分)

甲骨文数据库oracle个人学习(sql部分)甲骨文数据库oracle个人学习(SQL)BY BINGOSUMMER一、L ESSON11.sql*plus & isql*plusOracle 11g 中已经去掉了isql*plus功能,即不用通过http://IP:5560/isqlplus打开2.连字运算符|| :连字符两边的列被合并成一个单个的输出列。

select last_name || job_id AS employees from employees;3.文字字符串select last_name || ‘is a ‘|| job_id as employees from employees;单引号包括起来。

4.去掉相同的行:关键字:distinctselect distinct department_id from employees;5.描述表describe tablename二、L esson21.where字符串和日期,包括在单引号之中。

数字不包括在单引号之中。

所有的字符搜索是大小写敏感的。

日期格式为DD-MON-RR别名不能用在WHERE中。

2.between必须先指明下限,如where department_id between 2500 and 3500;3.in如果IN条件中的成员是字符或日期,必须在单引号之中。

4.LIKE% 表示0个或多个字符_ 表示一个字符。

搜索%或_字符,要用转义符”\”,如\%,\_5.IS NULL不能用=null来表示6.优先规则算术运算>连字操作>比较操作>IS (NOT) NULL ,LIKE, (NOT) IN>(NOT)BETWEEN>NOT>AND>OR7.ORDER BY可以依别名来排序默认是升序ASC,也可以是降序DESC可以多列排序,逗号分隔三、L ESSON31.SQL单行函数仅对单个行进行去处,并且每行返回一个结果。

Oracle_Plsql个人学习笔记总结

Oracle_Plsql个人学习笔记总结

备注:以下是个人学习笔记总结,其实是本人容易忘记,工作中碰到的一些知识点,记录下来整理成笔记了,序号之间并不是按照某种类型划分的,都是随意的标记一下,希望对大家有所帮助。

昵称:阿杜笑傲江湖(其实就是个名字而已,并不江湖…)name:杜立鸿(不要冒充,万一哪天中奖了呢?)sex:爷们---------------------------废话不多说,GO,GO,Go……1.允许修改分区建(有时候分区键更新不了,需要以下这样处理,当然了分区键本来是不允许更新的,都得根据实际情况)alter table t1 enable row movement;2. 获取某一时间最近的时间sqlselect *from t_datetime twhere t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss') =(select min(t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss'))from t_datetime t);3. 1.创建一个object类型的数据库类型对象。

表示学生实体类型。

(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。

否则,函数外部代码是无法识别该类型的)。

CREATE OR REPLACE TYPE student_obj_type AS OBJECT(stu_no NUMBER, --学号stu_name VARCHAR2(255), --姓名stu_sex VARCHAR2(2),--性别score NUMBER--成绩);4.创建一个嵌套表类型的数据库类型对象。

表示学生实体集合类型。

该类型也将用作函数中定义的返回类型。

(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。

oracle常用的SQL及语法

oracle常用的SQL及语法

1、两个oracle 开发工具介绍a)SqlDbx王金生曾推荐过的一款数据库客户端开发工具,使用容易,不需要额外的安装其它插件,有sql提示功能,支持Oracle,Sybase ASE, IBM,DB2/UDB, MicrosoftSQL Server 和ODBC数据源,免费绿色版。

b)PLSQL Developer专门针对oracle开发的一款比较专业的客户端工具,除了常用的数据库操作外,还支持存储过程及函数的调试功能等比较高级的功能,详细的操作可以安装完毕后大家去慢慢研究。

配置方式见网上找的一段方法,第二种:/view/65b5a80f6c85ec3a87c2c583.html以上提到的工具及可能用到的插件见共享目录中的文件。

2、oracle 与 sqlserver 语法大比较a)oracle各类型字段描述b)字段类型比较c)常用函数比较注:此处仅记录语法有区别的地方,更多丰富的语法请查看附件中的手册。

以下的exp为expression的缩写d)关于脏读目前我们使用的sqlserver 数据库,在查询数据时,都要求在select语句中后面跟一个(nolock)或(with nolock)来保证读取大表时不影响其它程序进程的数据操作。

在oracle中,目前还不允许脏读的方式,在每次select 后,读到的数据都是已经commit的数据,所以为了避免读取数据的不准确,程序中如果有比较耗时的sql 操作,尤其是在insert 和update后,尽量减小事务,而且要在事务结束后及时commit。

e)表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)在创建表及其主键、外键、CHECK、UNIQUE、DEFAULT、INDEX时,SQL SERVER 与ORACLE的语法大致相同。

主要区别如下:Oracle定义表字段的default属性紧跟字段类型之后,如下:Create table MZ_Ghxx( ghlxh number primay key ,rq date default sysdate not null,….)而不能写成Create table MZ_Ghxx( ghlxh number primay key ,rq date not null default sysdate,….)f)存储过程/函数结构的不同SQLSERVER中存储过程的结构大致如下CREATE PROCEDURE procedure_name/*输入、输出参数的声明部分*/ASDECLARE/*局部变量的声明部分*/BEGIN/*主体SQL语句部分*//*游标声明、使用语句在此部分*/ENDORACLE中存储过程的结构大致如下CREATE OR REPLACE PROCEDURE procedure_name(/*输入、输出参数的声明部分*/ )AS/*局部变量、游标等的声明部分*/BEGIN/*主体SQL语句部分*//*游标使用语句在此部分*/EXCEPTION/*异常处理部分*/END ;ORACLE端FUNCTION语法说明CREATE [OR REPLACE] FUNCTION function_name[(argument [{IN | OUT | IN OUT }] ) type,…[(argument [{IN | OUT | IN OUT }] ) typeRETURN return_type {IS | AS}BEGIN…END;变量赋值在SQL SERVER语句中用如下语句对局部变量赋值(初始值或数据库表的字段值或表达式):“SELECT 局部变量名= 所赋值(初始值或数据库表的字段值或表达式)”;而在ORACLE中,将初始值赋给局部变量时,用如下语句:“局部变量名: = 所赋值(初始值或表达式);”,将检索出的字段值赋给局部变量时,用如下语句:“SELECT 数据库表的字段值INTO 局部变量名…”。

qlsql学习笔记

qlsql学习笔记

、PL/SQL中的DML操作:1、select * [into v_var/v_record]from tb_name[where expression]2、insert into tb_namevalues()[returning rowid,tb_row into v_rowid,v_var]3、update tb_name(这里也可以是个select查询)set tb_col=expression[where expression/current of cur_name][returning rowid,tb_row into v_rowid,v_var](注意:没有from关键字,sqlserver中是有的p)4、deletefrom tb_name[where expression/current of cur_name][returning rowid,tb_row into v_rowid,v_var]二、语句块结构1、<<de_name>>declare/*declaretive section*/begin/*statment*/exception/*exception section*/end de_name三、错误处理1、申明异常declare e_val exception2、抛出异常raise e_val3、处理异常exception when e_val1 then expression1;when e_val2 then expression2;...;end;4、others异常处理器:能捕获所有的异常,有2个内置函数sqlcode,sqlerrmwhen others thenv_errorcode:=sqlcode;v_errortext:=substr(sqlerrm,1,200);insert into log_table values(v_errorcode,v_errortext);5、raise_application_error:创建自己的错误的消息四、变量1、v_var 类型[constant] [not null] [:=value]五、类型1、标量类型:char、number、date2、复合类型:record、nested table、index-by table、varray3、LOB类型:BFILE、LOB、CLOB、NLOB4、引用类型:REF CURSOR、REF OBJECT TYPE5、对象类型:object type、sys.anytype、sys.anydata、sys.anydateset六、条件语句1、if expression then/*statment*/elsif expression then/*statment*/else/*statment*/end if2、<<case_name>>case test_varwhen value1 then expression1;when value2 then expression2;when value3 then expression3;else expression;end case case_name;3、<<case_name>>casewhen expression1 then expression1;when expression2 then expression2;when expression3 then expression3;else expression;end case case_name;七、循环结构1、loop/*statment*/if expression then exit;end if;end loop2、loop/*statment*/exit when expression;end loop3、while expression loop/*statment*/end loop4、for v_count in [reverse] 1..10 loop/*statment*/end loop八、GOTO语句1、/*statment*/if expression then goto 1_name;/*statment*/<<1_nanme>>null;(空语句)九、动态sql语句1、execute immediate statment [into v_var] [using]例1:execute immediate 'select count(*) from emp' into v_count例2:execute immediate 'select * from emp where emp_id<=:v_id' using 7788一○、批绑定1、forall v_count in 1..10 (此处没有loop循环)/*dml_statment*/1)、事务性问题:操作中一行有错误,只有该行回滚,其他的提交(参考forall.sql)2)、有save exception特性(参考forall.sql)2、bulk collect:可以用于select into,fetch into,returning into一一、自治事务(它是独立的,与父事务状态无关)1、pragma autonomous_transaction2、必须在语句块的说明部分3、只有(顶层自治块;本地的、单个的和打包的子程序;对象类型的方法;数据库触发器)可以标记为自治4、申明为自治的事务必须要以commit或rollback语句结束一二、游标1、cursor cur_name(v_var1,v_var2..) is select_statment [for update of col_1,col_2..] [nowait/wait n];open cur_name;fetch cur_name into v_var;close cur_name;2、属性有:%found、%notfound、%isopen、%rowcount3、处理隐式游标:sql%notfound、sql5rowcount等等4、游标for循环:游标申明后即可用for v_count in cur_name loop...end loop处理数据5、隐式for循环:for v_count in (select * from tb_name) loop...end loop;6、游标变量声明:type type_name is ref cursor [return return_type]7、游标变量使用:open v_cursorvar for select ...一三、过程和函数1、create or replace procedure proc_name(var [in|out|in out] type,..)asbegin/*statment*/end2、create or replace function func_name(var [in|out|in out] type,..)return return_typeasbegin/*statment*/return expression;end3、call的用法:call proc/func/对象的方法/java子程序(argument_list)call func(argument_list) into host_variable(只限于函数)(注意:call是sql语句,不是pl/sql语句)一四、包1、创建包头:create or replace package package_nameas/*...*/end2、创建包体:create or replace package body body_nameas/*...*/end3、可串行复用的包:create or replace package package_name aspragma serially_reusable(申明为可串行复用)4、可串行复用的包的特点是重置包内的游标的状态,节省内存一五、使用共享池(dbms_shared_pool)1、keep(name,flag)锁定对象在共享池中2、unkeep(name,flag)删除共享池中的对象3、sizes(minsize number)把共享池中的内容响应到屏幕上4、aborted_request_threshold(size number)oracle不会释放对象,除非至少需要size个字节一六、触发器1、触发器格式:create or replace trigger trigger_name{before|after|instead of} {insert|update|delete}on object_namedeclare/*..*/begin/*statment*/end2、系统触发器:create or replace trigger trigger_name{before|after} {事件}on object_name[for each row]declare/*..*/begin/*statment*/end注意:after的事件:starup,servererror,logonbefore的事件:shutdown,logoff同时满足的:create,drop,alter3、限制:不能发出事务控制语句(如:commit,rollback等);其调用的proc和func里不能有事务控制语句(自治事务除外)4、变异表:触发器中对触发器的本身触发的表再有查询的动作,那就是变异表;(参考方案mutating.sql)一七、集合1、index-by表type t_val is table of type index by binary_integer2、嵌套表type t_val is table of type [not null](一定要初始化)3、可变数组type t_val is varray(int) of type [not null]4、exists,count,limit,5、first,last,next,prior6、extend,trim,delete一八、对象(参考point.sql,pointsql.sql)1、create or replace type obj_name as OBJECT(/*statment*/)2、create or replace type body obj_name as/*statment*/begin/*statment*/end;3、大对象(LOB)(参考lob_dml.sql)一九、管道化表函数(参考pipelined.sql)1、返回整个行的集的函数,不是一次全部返回2、作用:把数据从一种类型转化成另一种类型二○、表函数1、返回整个行的集(作为一个集合)的函数二一、外部里程1、C外部例程1)、先把你的C函数编译到操作系统上的一个共享库中;2)、建立监听程序来支持与外部例程驱动器extproc的连接;3)、创建一个数据字典对象来代表操作系统上的共享库;create or replace library sendmaillibraryas '/libs/libmail.so';4)、创建包装来调用该例程。

SQL必知必会笔记

SQL必知必会笔记

SQL必知必会笔记第一章了解SQL1. 数据库是一个以某种有组织的方式存储的数据集合保存有组织的数据的容器(通常是一个文件或是一组文件) 2. 数据库软件应成为数据库管理系统DBMS3. 表某种特定类型数据的结构化清单4. 模式(schema)关于数据库和表的布局及特性的信息5. 列(Colomn)表中的一个字段。

所有表都是由一个或是多个列组成的。

6. 数据类型(datatype)所容许的数据的类型。

每个表列都有相应的数据类型,他限制(或容许)该列中存储的数据。

7. 行表中的一个记录8. 主键(primary key)一列或者一组列,其值能够唯一标识表中的每个行唯一标识表中每行的这个列(或这组列)称为主键。

主键用来表示一个特定的行。

没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

9. 表中任何列都可以作为主键,只要满足(1)任意两行都不具有相同的主键值(2)每个行都必须具有一个主键值(主键列不允许NULL值)(3)主键列中的值不允许修改或更新(4)主键值不能重用,即某列从表中删除,它的主键不能赋给以后的新行。

第三章按多个列排序1( 子句(clause)sql语句由子句构成,有些子句是必须的,而有的是可选的。

一个子句通常由一个加上所提供的数据组成。

2( 子句的例子有SELECT语句的FROM子句3( ORDER BY 子句的位置在指定一条ORDER BY子句时,应保证它是SELECT语句中最后一条子句。

该子句的次序不对将会出现错误消息。

4( 按多个列排序执行多个列排序命令前可以发现同样的工资的人名不是按字典序排列的执行以后~~~撒花~~按列位置排序select FIRST_NAME,salaryfrom employeesorder by salary,FIRST_NAME;等价于select FIRST_NAME,salaryfrom employeesorder by 2,1;5( Order by 默认为升序排序而order by salary DESC 为降序排序DESC关键字只直接应用到位于其前面的列名ORDER BY salary DESC, FIRST_NAME; 6( 在SELECT语句中,数据根据WHERE 子句中指定的搜索条件进行过滤。

oracle sql数据库基本知识

oracle sql数据库基本知识

oracle sql数据库基本知识
OracleSQL是一种用于操作Oracle数据库的编程语言,是关系型数据库操作语言的一种。

它被广泛应用于企业级应用程序开发和管理中。

以下是Oracle SQL数据库基本知识:
1. 数据库对象:Oracle数据库由多个对象组成,包括表、索引、视图、存储过程等。

2. SQL语句:Oracle SQL包括多种SQL语句,如SELECT、UPDATE、INSERT、DELETE等,用于对数据库进行操作。

3. 数据类型:Oracle SQL的数据类型包括数字、字符、日期等。

4. 数据库连接:Oracle SQL可以通过JDBC或ODBC等连接方式与Oracle数据库进行连接。

5. 数据库管理:Oracle SQL可以用于管理数据库,如创建用户、授权、备份等。

6. 视图和存储过程:Oracle SQL支持视图和存储过程,用于简化和优化数据库操作。

7. 事务管理:Oracle SQL支持事务处理,保证数据库操作的一致性和可靠性。

总之,Oracle SQL是一种强大的数据库操作语言,具有广泛的应用价值。

掌握Oracle SQL的基本知识,可以提高企业级应用程序的开发和管理效率。

- 1 -。

Oracle学习笔记:判断表是否存在函数is_table_exists

Oracle学习笔记:判断表是否存在函数is_table_exists

Oracle学习笔记:判断表是否存在函数is_table_exists在 Oracle 中可以利⽤系统表 user_tables 和 all_talbes 判断表是否存在,但有时在存储过程中确认表是否存在并不⽅便,因此有必要封装⼀个函数,进⾏调⽤。

下⾯是函数的内容:-- 判断表是否存在create or replace function temp_is_table_exists(is_table_name varchar2, is_owner_name varchar2 default null)return boolean isvcproc_name varchar2(100) := 'TEMP_IS_TABLE_EXISTS';vncount number(10);vnerr_code number;vcerr_text varchar2(2000);vcowner_name varchar2(1000);vctable_name varchar2(1000);beginvncount := 0;vcowner_name := is_owner_name;vctable_name := is_table_name;if vcowner_name is null thenselect count(1) into vncountfrom user_tableswhere table_name = upper(vctable_name);elseselect count(1) into vncountfrom all_tableswhere owner = upper(vcowner_name)and table_name = upper(vctable_name);end if;if vncount > 0 thenreturn true;elsereturn false;end if;exceptionwhen others thenvnerr_code := sqlcode;vcerr_text := sqlerrm;-- 记录异常以备查pro_cwh_test(vcproc_name, vctable_name, vnerr_code, vcerr_text);rollback;commit;end temp_is_table_exists;其中,⼊参为:表名 + ⽤户名,⽤户名可缺省。

Oracle数据库培训-SQL基础篇

Oracle数据库培训-SQL基础篇

连字运算符
连字运算符: •连接列或者字符串到其它的列 •用两个竖线表示(||) •构造一个字符表达式的合成列 SELECT first_name||last_name AS Employees FROM employees;
文字字符串
•文字字符串是包含在SELECT列表中的一个字符 串,一个数字或者一个日期 •日期和字符的文字字符串值必须用单引号括起来 •每个文字字符串在每行输出一次 SELECT last_name||' is a '||job_id
空值
•null 是一个未分配的、未知的,或不适用的值 •null不是0,也不是空格 •包含空值的算术表达式计算结果为空 SELECT last_name, job_id, salary,
commission_pct FROM employees;
定义列别名
列别名: •改变列标题的名字 •可用于计算结果 •紧跟在列名后面–在列名和别名之间可以有选项 AS 关键字 •如果别名中包含有空格、或者特殊字符、或者大 小写敏感,要求用双引号 SELECT last_name AS name, commission_pct comm FROM employees;
SQL 函数
• 函数是SQL的一个非常强有力的特性,函数能够 用于下面的目的:
– 执行数据计算 – 修改单个数据项 – 操纵输出进行行分组 – 格式化显示的日期和数字 – 转换列数据类型
• SQL函数有输入参数,并且总有一个返回值。 注:在本课中讲述的大多数函数是针对SQL的 Oracle版的。
SQL 函数 (续)
AS "Employee Details” FROM employees;
约束和排序数据

ORACLE-SQL语句学习教程

ORACLE-SQL语句学习教程

目录概述 (2)第一章SQL*PLUS 工具软件的使用 (5)第二章基本查询 (9)第三章条件查询 (13)第四章单行函数 (16)第五章多表查询 (20)第六章组函数 (23)第七章子查询 (25)第八章运行期间指定变量 (29)第九章创建基表 (31)第十章ORACLE数据字典 (36)第十一章操纵数据 (38)第十二章修改基表及其约束 (42)第十三章创建序列 (45)第十四章创建视图 (47)第十五章创建索引 (50)概述20世纪70年代初,E.F.Codd 在计算机学会(Association of Computer Machinery, 简写为ACM)期刊Communications of the ACM(ACM 通讯)发表了题为”A Relational Model of Data for Large Shared Data Banks”(大型共享数据库的数据关系模型)的论文,该论文提出的关系数据库模型成为今天最为权威的关系型数据库管理模型。

IBM公司首先使用该模型开发出了结构化英语查询语言SEQUEL(Structured English Query Language),作为其关系数据库原型System R的操作语言,实现对关系数据库的信息检索。

SEQUEL后来简写为SQL,即Structured Query Language(结构化查询语言)的缩写。

ORACLE公司于1997年推出了第一个商业应用的SQL软件。

20世纪80年代初,美国国家标准化组织(ANSI)开始着手制订SQL标准,最早的ANSI标准于1986年颁布,它也被称为SQL-86。

标准的出台使SQL作为标准的关系数据库语言的地位得到加强。

SQL标准几经修改和完善,目前SQL语言方面新的ANSI标准是1992年制定的ANSI X3.135-1992,“Database Language SQL”。

此标准也被国际电工委员会(International Electro technical Commission, 即IEC)所属的国际标准化组织(International Standards Organization, 即ISO)所接受,并将它命名为ISO/IEC9075:1992, “Database Language SQL”。

Oracle学习笔记系列(二)之数据库日期格式转换

Oracle学习笔记系列(二)之数据库日期格式转换

Oracle学习笔记系列(⼆)之数据库⽇期格式转换Oracle数据库⽇期格式转换select sysdate from dual;select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') as mydate from dual;select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as mydate from dual;select to_number(to_char(sysdate,'yyyymmddhh24miss')) as mydate from dual;转换函数与date操作关系最⼤的就是两个转换函数:to_date(),to_char() to_date():作⽤将字符类型按⼀定格式转化为⽇期类型。

具体⽤法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串,后者为转换⽇期格式。

【注意,前后两者要以⼀对应】如;to_date('2004-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss')多种⽇期格式:YYYY:四位表⽰的年份 YYY,YY,Y:年份的最后三位、两位或⼀位,缺省为当前世纪 MM:01~12的⽉份编号 MONTH:九个字符表⽰的⽉份,右边⽤空格填补 MON:三位字符的⽉份缩写 WW:⼀年中的星期 D 的第⼏个⼩时,取值为00~23 MI:⼀⼩时中的分钟 SS:⼀分钟中的秒 SSSS:从午夜开始过去的秒数to_char():将⽇期转按⼀定格式换成字符类型即把当前时间按yyyy-mm-dd hh24:mi:ss格式转换成字符类型在oracle中处理⽇期⼤全 TO_DATE格式 Day:dd number 12dy abbreviated friday spelled out fridayddspth sp 12⼩时格式下时间范围为: 1:00:00 - 12:59:59 ....⽇期和时间函数汇总1.⽇期和字符转换函数⽤法(to_date,to_char)select to_char(to_date(222,'J'),'Jsp') from dual; --Two Hundred Twenty-Two2.求某天是星期⼏select to_char(to_date('2018-01-09','yyyy-mm-dd'),'day') from dual; --星期⼆select to_char(to_date('2018-01-09','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; --tuesday设置⽇期语⾔ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样 TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')3.两⽇期间的天数select floor(sysdate - to_date('19921123','yyyymmdd')) from dual; --91794. 时间为null的⽤法select p.claimno, p.endcasedate from prplclaim pUNIONselect '1', TO_DATE(null) from dual;注意要⽤TO_DATE(null)5.取⽇期范围a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')这样12⽉31号中午12点之后和12⽉1号的12点之前是不包含在这个范围之内的。

oracle系统视图SQL语句整理

oracle系统视图SQL语句整理

oracle系统视图SQL语句整理-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝⼤部分都是视图-- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表。

-- ALL_TABLES意为某⼀⽤户拥有的或可以访问的所有的关系表。

-- USER_TABLES意为某⼀⽤户所拥有的所有的关系表。

-- 当某⼀⽤户本⾝就为数据库DBA时,DBA_TABLES与ALL_TABLES等价。

-- DBA_TABLES >= ALL_TABLES >= USER_TABLES-- 需要注意的是在ORACLE数据库中⼤⼩写是敏感的,⽽此三表中数据默认都是⼤写的,所以在进⾏查询的时候注意⼩写的数据可能会造成数据⽆法查到。

SELECT * FROM dba_views WHERE view_name LIKE 'DBA%';SELECT * FROM dba_views WHERE view_name LIKE 'ALL%';SELECT * FROM dba_views WHERE view_name LIKE 'USER%';SELECT * FROM dba_views WHERE view_name LIKE 'V_$%'; -- 针对某个实例的视图SELECT * FROM dba_views WHERE view_name LIKE 'GV_$%'; -- 全局视图,针对多个实例环境SELECT * FROM dba_views WHERE view_name LIKE 'SESSION%';SELECT * FROM dba_views WHERE view_name LIKE 'INDEX%';SELECT count(1) FROM dba_tables;SELECT count(1) FROM all_tables;SELECT count(1) FROM user_tables;-- V$/GV$开头的绝⼤部分都是V_$/GV_$表的别名SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'V$%';SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'GV$%';-- X$没有对应的X_$SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'X$%';-- ⽐较常⽤的DBA开头的视图有select * from dba_users; --数据库⽤户信息select * from dba_roles; --⾓⾊信息select * from dba_segments; --表段信息select * from dba_extents; --数据区信息select * from dba_objects; --数据库对象信息select * from dba_lobs; --lob数据信息select * from dba_tablespaces; --数据库表空间信息select * from dba_data_files; --数据⽂件设置信息select * from dba_temp_files; --临时数据⽂件信息select * from dba_rollback_segs; --回滚段信息select * from dba_ts_quotas; --⽤户表空间配额信息select * from dba_free_space; --数据库空闲空间信息select * from dba_profiles; --数据库⽤户资源限制信息select * from dba_sys_privs; --⽤户的系统权限信息select * from dba_tab_privs; --⽤户具有的对象权限信息select * from dba_col_privs; --⽤户具有的列对象权限信息select * from dba_role_privs; --⽤户具有的⾓⾊信息select * from dba_audit_trail; --审计跟踪记录信息select * from dba_stmt_audit_opts; --审计设置信息select * from dba_audit_object; --对象审计结果信息select * from dba_audit_session; --会话审计结果信息select * from dba_indexes; --⽤户模式的索引信息-- ⽐较常⽤的ALL开头的视图有select * from all_users; --数据库所有⽤户的信息select * from all_objects; --数据库所有的对象的信息select * from all_def_audit_opts; --所有默认的审计设置信息select * from all_tables; --所有的表对象信息select * from all_indexes; --所有的数据库对象索引的信息select * from all_tab_comments; --查询所有⽤户的表,视图等select * from all_col_comments; --查询所有⽤户的表的列名和注释.select * from all_tab_columns; --查询所有⽤户的表的列名等信息(详细但是没有备注)-- ⽐较常⽤的ALL开头的视图有select * from user_objects; --⽤户对象信息select * from user_source; --数据库⽤户的所有资源对象信息select * from user_segments; --⽤户的表段信息select * from user_tables; --⽤户的表对象信息select * from user_tab_columns; --⽤户的表列信息select * from user_constraints; --⽤户的对象约束信息select * from user_sys_privs; --当前⽤户的系统权限信息select * from user_tab_privs; --当前⽤户的对象权限信息select * from user_col_privs; --当前⽤户的表列权限信息select * from user_col_comments; -- 查询本⽤户的表的列名和注释select * from user_role_privs; --当前⽤户的⾓⾊权限信息select * from user_indexes; --⽤户的索引信息select * from user_ind_columns; --⽤户的索引对应的表列信息select * from user_cons_columns; --⽤户的约束对应的表列信息select * from user_clusters; --⽤户的所有簇信息select * from user_clu_columns; --⽤户的簇所包含的内容信息select * from user_cluster_hash_expressions; --散列簇的信息-- ⽐较常⽤的V$开头的别名有select * from v$database; --数据库信息select * from v$datafile; --数据⽂件信息select * from v$controlfile; --控制⽂件信息select * from v$logfile; --重做⽇志信息select * from v$instance; --数据库实例信息select * from v$log; --⽇志组信息select * from v$loghist; --⽇志历史信息select * from v$sga; --数据库SGA信息select * from v$parameter; --初始化参数信息select * from v$process; --数据库服务器进程信息select * from v$bgprocess; --数据库后台进程信息select * from v$controlfile_record_section; --控制⽂件记载的各部分信息select * from v$thread; --线程信息select * from v$datafile_header; --数据⽂件头所记载的信息select * from v$archived_log; --归档⽇志信息select * from v$archive_dest; --归档⽇志的设置信息select * from v$logmnr_contents; --归档⽇志分析的DML DDL结果信息select * from v$logmnr_dictionary; --⽇志分析的字典⽂件信息select * from v$logmnr_logs; --⽇志分析的⽇志列表信息select * from v$tablespace; --表空间信息select * from v$tempfile; --临时⽂件信息select * from v$filestat; --数据⽂件的I/O统计信息select * from v$undostat; --Undo数据信息select * from v$rollname; --在线回滚段信息select * from v$session; --会话信息select * from v$transaction; --事务信息select * from v$rollstat; --回滚段统计信息select * from v$pwfile_users; --特权⽤户信息select * from v$sqlarea; --当前查询过的sql语句访问过的资源及相关的信息select * from v$sql; --与v$sqlarea基本相同的相关信息select * from v$sysstat; --数据库系统状态信息-- ⽐较常⽤的SESSION开头的视图有select * from session_roles; --会话的⾓⾊信息select * from session_privs; --会话的权限信息-- ⽐较常⽤的INDEX开头的视图有select * from index_stats; --索引的设置和存储信息-- 伪表,参考oracle 中 dual 详解:/ozhouhui/article/details/7935196select * from dual; --系统伪列表信息select sysdate from dual; --可将Sysdate视为⼀个其结果为当前⽇期和时间的函数,在任何可以使⽤Oracle函数的地⽅都可以使⽤Sysdate。

尚学堂马士兵Oracle学习笔记

尚学堂马士兵Oracle学习笔记

02_unlock_user.avi 使用超级管理员登录到数据库上:sqlplus sys/bjsxt as sysdba � 当成 DBA 登录到服务 器上 连上之后 更改 user :alter user scott account unlock; 更改用户 解除锁定
03_table_structures.avi 第二章 SQL 语言 Sql 语言是在数据库地下进行操作的专门的语言,sql 语言本身是一种标准语言,它是一个 国际标准,它定义了套标准 SQL1922, SQL1999,SQL 在大多数数据库上通用,或许有轻微 的改变 包含四大语句: 1. 查询语句 查询语句只有一种就是 select 语句 2. DML 语句 DML 语句包含 Insert,Update,Delete 等常用语句
------
--------------------
------------------
----------
--------------
---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20

oracle sql注释

oracle sql注释

oracle sql注释(原创版)目录1.Oracle SQL 注释的概述2.Oracle SQL 注释的分类3.Oracle SQL 注释的语法4.Oracle SQL 注释的实例5.Oracle SQL 注释的优缺点正文Oracle SQL 注释是 Oracle 数据库管理系统中用于解释 SQL 语句的一种方法。

它可以为 SQL 语句提供额外的信息,以帮助数据库管理员和开发人员更好地理解 SQL 语句的功能和目的。

Oracle SQL 注释可以分为两种类型:单行注释和多行注释。

单行注释使用双斜杠“//”来表示,而多行注释使用斜杠星号“/* */”来表示。

Oracle SQL 注释的语法非常简单。

单行注释的语法是:在 SQL 语句的前面或者后面使用双斜杠“//”,并在其中输入注释文本。

例如:“SELECT * FROM // 员工信息表”。

多行注释的语法是:在 SQL 语句的前面使用斜杠星号“/*”,在 SQL 语句的后面使用星号斜杠“*/”,并在其中输入注释文本。

例如:“SELECT * FROM /* 员工信息表 */”。

以下是一个 Oracle SQL 注释的实例:```-- 这是一个单行注释SELECT * FROM 员工信息表;/*这是一个多行注释描述员工信息表的查询语句*/SELECT * FROM 员工信息表;```Oracle SQL 注释的优点是:它可以为 SQL 语句提供额外的信息,以帮助数据库管理员和开发人员更好地理解 SQL 语句的功能和目的。

此外,它还可以提高 SQL 语句的可读性,使 SQL 语句更容易理解和维护。

Oracle SQL 注释的缺点是:它可能会增加 SQL 语句的长度,从而增加数据库的存储空间和查询时间。

此外,如果注释文本不慎泄露,可能会对数据库的安全性造成威胁。

总的来说,Oracle SQL 注释是一种非常有用的工具,它可以帮助数据库管理员和开发人员更好地理解和维护 SQL 语句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL、PL/SQL学习笔记1.SQL并行查询alter session enable parallel dmlexecute immediate 'alter session enable parallel dml'; --修改会话并行DMLselect /*+parallel(a,4)*/ * from table_name aselect /*+parallel(a,8)*/ * from table_name aselect /*+parallel(a,4) parallel(b,4) parallel(c,4)*/ a.*,b.*,c.*from table_name1 a,table_name2 b,table_name cinsert /*+parallel(t,4)*/ into table_name tinsert /*+parallel(t,8)*/ into table_name t/*+parallel(t,8)*/ 并行处理,一般为CPU的倍数如:4,8等,在执行类型SQL必须先运行:alter session enable parallel dml2.删除表分区数据alter table masamk.tb_mk_sc_user_mon truncate partition mk_user_mon_'||trim(iv_month) 删除指定表分区数据3.minus(差集)与intersect(交集)minus 指令是运用在两个SQL 语句上。

它先找出第一个SQL 语句所产生的结果,然后看这些结果有没有在第二个SQL 语句的结果中,如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现; 如果第二个SQL 语句所产生的结果并没有存在于第一个SQL 语句所产生的结果内,那这笔资料就被抛弃。

intersect 指令是运用在两个SQL语句上,如果两个SQL语句的记录完全相同则显示相应记录,否则将不在结果中出现4.Order by 中的 nulls lastorder by area_code,bill_month nulls last --nulls last 将排序字段为null记录放在最后面5.nvl的几个不同函数nvl(a,1) 如果a 为null 返回1,否则返回anvl2(a,1,0) 如果a 为null 返回0,否则返回1nullif(a,b) 如果a = b 返回null ,否则返回a6.怎样确保最终用户在数据库中只有N个会话(如果N 为1则只有1个会话)create profile one_session limit sessions_per_user N; --创建参数文件(N为任意整数)alter user <用户> profile one_session; --设置用户的参数文件alter system set resource_limit=true; --设置资源限定7.表的字段参照另外表的字段create table resources ( resource_name varchar2(10) primary key,,,,);create table schedules (resource_name references resources,….);8.绑定变量的使用1)sql中的绑定变量定义绑定变量:variable emplno varchar2(10);给绑定变量赋值:execute :emplno := ‘1234567890’;sql/plus中使用绑定变量:select * from emp where empno = :emplno;pl/sql中使用绑定变量:execute immediate ‘insert into t values(:x)’ using x;游标中使用绑定变量:open c1 for ‘select * from emp where empno=:empno’ using empno;2)DDL语句中不允许使用绑定变量,如:execute immediate ‘create table a as selct * from bwhere x=:x’ using x;3)pl/sql中的批量绑定变量(forall)a)forall i in 1..x.countdml;--只能有一条语句(update,insert,delete)sql%bulk_rowcount(i):用于取得在执行批量绑定操作时的第i个元素作用的行数b)bulk collect 子句:用于取得批量数据,它只适用于select into、fetch into和DML返回子句语法:…BULK COLLECT INTO collection_name…i.select 中使用bulk collectdeclaretype emp_table_type is table emp%rowtype index by binary_integer;emp_table emp_table_type;beginselect * bulk collect into emp_table from emp where deptno=&no;for i in 1..emp_table.count loopdbms_output.put_line(emp_table(i).emp);end loop;forall i in 1..emp.table.countupdate sal set deptno = emp_table(i).deptnowhere empno = emp_table(i).empno;dbms_output.put_line('第2个元素更新的行数为:'||sql%bulk_rowcount(2));end;ii.dml的返回子句中使用bulk collectdeclaretype ename_table_type is table of emp.ename%type;ename_table ename_table_type;begindelete emp where deptno=&noreturning ename bulk collect into ename_table;for i in 1..ename_table.count loopdbms_output.put_line(ename_table(i));end loop;end;c)fetch c1 bulk collect into collect1,collect2,…[limit rows]9.在SQL中锁定记录锁(lock)机制用于管理对共享资料的并发访问,并提供数据完整性和一致性锁的类型:DML锁、DDL锁、内部锁和闩1)DML锁a.事务锁(TX锁):事务发起第一个修改时会得到TX锁,直到事务提交或回滚b.DML Enqueue锁(TM锁):用于确保在修改表的内容时,表的结构不会改变2)DDL锁a.排他DDL锁(Exclusive DDL Lock):这会防止其他会话得到它们自己的DDL锁或TM(DML)锁(即其他会话只能对该表执行select )。

如:alter tableb.共享DDL锁(Share DDL Lock):这些锁会保护所引用对象的结构,使之不会被其他会话修改,但是允许修改数据。

如在创建VIEW时,对原始表就会加共享锁,此时原始可以修改数据,但不能修改表结构c.可中断解析锁(Breakable parse locks):这些锁允许一个对象向另外某个对象注册其依赖性3)闩(latch):是轻量级的串行化设备,用于协调对共享数据结构、对象和文件的多用户访问;闩用于保护某些内存结构,如数据库块缓冲区缓存或共享池中的库缓存4)手动锁定和用户定义锁a.通过一条SQL语句手动地锁定数据。

i.select … for update [nowait/wait [n]]ii.select … for update of table_name --多表关联时锁定指定表的数据行iii.lock table in exclusive modeb.通过DBMS_LOCK包创建我们自己的锁5)select …for update [nowait/wait [n]] [skip locked] 详解select * from resources where resource_name=’abc’ for update [nowait/wait [n]] [skip locked]; nowait:立即执行,如果另有会话正在修改该记录会立即报告错误:ORA-00054: 资源正忙,要求指定NOW AIT;如果不选择nowait选项则会一直处理等待状态。

wait [n]:等待n秒,如果另有会话正在修改该记录会报告错误:ORA-30006: 资源已被占用;执行操作时出现W AIT 超时skip locked:跳过已被别的会话锁定的记录6)set transaction read only(只读事务):使会话取得特定时间点的数据,即使其它会话已经修改并提交新数据,当前会话也只能看到锁定时的数据,同时当前会话不能执行DML.7)set transaction isolation level { serializable | read committed }(顺序事务):同只读事务,但允许执行DML语句。

10.数据库与实例的关系数据库(Database):物理操作系统文件或磁盘的集合。

(数据库是磁盘上存储的数据文件集合) 实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的统一线程/进和所共享。

(实例就是一组后进程和共享内存)实例与数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。

11.Oralce数据库所包含的文件类型1)与实例相关的文件:参数文件(parameter file)、跟踪文件(trace file)、警告文件(alert file)2)构成数据库的文件:数据文件(data file)、临时文件(temp file)、控制文件(control file)、重做日志文件(redo log file)、密码文件(password file)3)Oracle 10g新增文件:修改跟踪文件(change tracking file)、闪回日志文件(flashback log file)4)其他类型文件:转储文件(DMP file)、数据泵文件(Data Pumn file)、平面文件(flat file)12.表空间(tablespace)、段(segment)、区段(extent)、块(block)的关系1)表空间(tablespace):是Oracle中的一个逻辑存储容器,位于存储层次体系的顶层,包含一个或多个数据文件2)段(segment):占用存储空间的数据为对象,如表、索引、回滚段等;段由一个或多个区段组成3)区段(extent):是文件中一个逻辑上连续分配的空间;区段由块组成4)块(block):是Oracle中最小的空间分配单位;数据行、索引条目或临时排序结果就存储在块中;Oracle中常见的块大小:2K、4K、8K、16K(最大不能超过32K)5)它们之间的关系:数据库由一个或多个表空间组成,表空间由一个或多个数据文件组成,表空间包含段,段由一个或多个区段组成,区段则由连续的块组成13.名称解释1)决策支持系统(DSS):Decision Support System2)联机事务处理(OLTP):On-line Transaction Processing3)联机分析处理(OLAP):On-Line Analytical Processing也称为在线分析处理。

相关文档
最新文档