oracle笔记(3)
2021学年Oracle深度学习笔记ORACLE审计
27.Oracle深度学习笔记——ORACLE审计审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system 表空间中的SYS.AUD$表中不管是否打开数据库的审计功能,用管理员权限连接Instance;启动数据库;关闭数据库都会被记录。
1.相关参数:audit_sys_operations12C默认TRUE当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。
如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
audit_trail12C默认DBDB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;None:不做审计;2.审计级别开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement按语句审计,如audit table 会审计数据库中所有的create table,drop table,truncate table语句Privilege按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户 a 访问了用户b的表时(如select * fromb.t)会用到select any table权限,故会被审计。
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 ;采⽤该语句删除主键时,同名索引也会被删掉。
dbms_lob包学习笔记之三:instr和substr存储过程
dbms_lob包学习笔记之三:instr和substr存储过程instr和substr存储过程,分析内部⼤对象的内容instr函数与substr函数instr函数⽤于从指定的位置开始,从⼤型对象中查找第N个与模式匹配的字符串。
⽤于查找内部⼤对象中的字符串的instr函数语法如下:dbms_lob.instr(lob_loc in blob,pattern in raw,offset in integer :=1;nth in integer :=1)return integer;dbms_lob.instr(lob_loc in clob character set any_cs,pattern in varchar2character set lob_loc%charset,offset in integer:=1,nth in integer :=1)return integer;lob_loc为内部⼤对象的定位器pattern是要匹配的模式offset是要搜索匹配⽂件的开始位置nth是要进⾏的第N次匹配substr函数substr函数⽤于从⼤对象中抽取指定数码的字节。
当我们只需要⼤对象的⼀部分时,通常使⽤这个函数。
操作内部⼤对象的substr函数语法如下:dbms_lob.substr(lob_loc in blob,amount in integer :=32767,offset in integer :=1)return raw;dbms_lob.substr(lob_loc in clob character set any_cs,amount in integer :=32767,offset in integer :=1)return varchar2character set lob_loc%charset;其中各个参数的含义如下:lob_loc是substr函数要操作的⼤型对象定位器amount是要从⼤型对象中抽取的字节数offset是指从⼤型对象的什么位置开始抽取数据。
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学习笔记】定时任务(dbms_job)
【Oracle学习笔记】定时任务(dbms_job)⼀、概述Oralce中的任务有2种:Job和Dbms_job,两者的区别有:1. jobs是oracle数据库的对象, dbms_jobs只是jobs对象的⼀个实例,就像对于tables, emp和dept都是表的实例。
2.创建⽅式也有差异,Job是通过调⽤dbms_scheduler.create_job包创建的,Dbms_job则是通过调⽤dbms_job.submit包创建的。
3.两种任务的查询视图都分为dba和普通⽤户的,Job对应的查询视图是dba_scheduler_jobs和user_scheduler_jobs,dbms_jobs对应的查询视图为dba_jobs和user_jobs。
这⾥主要是介绍Dbms_job。
⼆、使⽤1、创建job:1BEGIN2 DBMS_JOB.SUBMIT(3 JOB OUT BINARY_INTERGER,--输出变量,是此任务在任务队列中的编号,也可以⾃定义,⼀般不传4 WHAT IN VARCHAR2,--执⾏的任务的名称及其输⼊参数5 NEXT_DATE IN DATE DEFAULT SYSDATE,--任务执⾏的时间6 INTERVAL IN VARCHAR2DEFAULT NULL,--任务执⾏的时间间隔7 NO_PARSE IN BOOLEAN DEFAULT FALSE,--⽤于指定是否需要解析与作业相关的过程8 INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,--⽤于指定哪个例程可以运⾏作业9 FORCE IN BOOLEAN DEFAULT FALSE--⽤于指定是否强制运⾏与作业相关的例程10 );11END新⼿可以使⽤窗⼝创建:2、删除job: dbms_job.remove(jobno); -- jobno任务号3、修改要执⾏的操作: job:dbms_job.what(jobno, what); --指定任务号以及存储过程4、修改下次执⾏时间:dbms_job.next_date(jobno, next_date); --指定任务号的时间5、修改间隔时间:dbms_job.interval(jobno, interval); --指定任务号的间隔时间6、改变与作业相关的所有信息,包括作业操作,作业运⾏⽇期以及运⾏时间间隔等.1 dbms_job.change(2 job in binary_integer,3 what in varchar2,4 next_date in date,5 interval in varchar2,6 instance in binary_integer default null,7 force in boolean default false8 );例⼦:dbms_job.change(2,null,null,'sysdate+2');6、启动job: dbms_job.run(jobno); --指定任务号启动7、停⽌job: dbms.broken(jobno, broken, nextdate); –broken为boolean值 N代表启动,Y代表没启动(STOP)三、Interval 说明间隔/interval是指上⼀次执⾏结束到下⼀次开始执⾏的时间间隔,当interval设置为null时,该job执⾏结束后,就被从队列中删除。
Oracle EBSGL学习笔记
12.81、冲销日记账1)原始借:租金10,000 本位币美元贷:现金10,000 本位币美元冲销借:现金10,000 本位币美元贷:租金10,000 本位币美元2)可以创建冲销日记账分录来冲销应计、估计、临时调整和重新分类,或更正错误。
3)方法:转换借贷项:通过转换借项和贷项金额来冲销日记账分录。
红字冲销:通过将原始日记账金额从正值改为负值来冲销日记账分录。
4)日记账> 输入> 复核日记账(B)其他活动日记账> 生成> 冲销2、自动冲销日记账1)可以自动冲销上一个月的应计日记账分录,并自动将其过账(如果需要)。
2)自动冲销日记账的前提条件:--日记账余额类型为“实际”--日记账类型已启用“自动冲销”选项--日记账已过帐,但尚未冲销--日记账冲销期间为“打开”或“将来可输入”3) 设置> 日记账> 自动冲销(AutoReverse)3、日记账分录报表提供:会计结算日期、类别、日记账名称、参考、日记账批4、与Oracle General Ledger 集成--在Excel中创建日记账--通过Web ADI 加载到GL_INTERFACE 表--从接口表中提交“日记账导入”-从Web ADI中与加载流程同时提交-从Web ADI 中作为独立的提交流程提交-从Oracle General Ledger中使用“导入日记账”窗口提交5、Web ADI 的核心功能1)布局功能--从布局中删除或向布局中添加字段--指定字段在布局中的位置--为布局中的字段分配默认值--保存布局,可以由具有适当责任的某个人来定义,然后由整个站点使用2) 文本导入功能--将文本文件数据导入到桌面文档中--创建可以修改和重复使用的映射模板,根据需要更改数据临时的移动目标。
3) 安全功能--将Web ADI 功能与菜单关联,创建用作安全配置文件的自定义访问点--将菜单附加到分配给用户的职责中,用用户级别限制Web ADI访问--为自助连接添加默认参数:强制用户在其桌面上生成文档时使用预定义的参数--将表单功能与用户的菜单关联,已授予其访问集成器的权限4) Internet 计算功能--集中部署,要操作词产品,客户机只需要浏览器和Excel--在Web 上运行6、通过Web ADI 进行桌面集成1) 集成器:Oracle General Ledger-日记账集成器、Oracle General Ledger-预算集成器、创建资产集成器、实地盘点集成器、HRMS集成器2)Oracle General Ledger-日记账集成器:--根据可定义的布局,自动生成基于电子表格的日记账分录工作表--允许通过复制和粘贴日记账行,然后进行增量式修改来快速的输入日记账--允许您定义可以反复修改和加载的日记账模板--使用安全措施和交叉验证规则以及其他引用字段全面验证账户--通过Oracle General Ledger开放接口将日记账加载到Oracle General Ledger7、导入日记账日记账> 导入> 运行1)将子分类帐和源系统数据导入Oracle General Ledger--定义分类账、币种、帐户、日记账来源和类别设置Oracle General Ledger,以接受日记账导入数据--运行“优化”程序,并定义并发程序控件。
韩顺平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数据库学习笔记
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常用命令大全(很有用,做笔记)
Oracle常⽤命令⼤全(很有⽤,做笔记)⼀、ORACLE的启动和关闭1、在单机环境下要想启动或关闭ORACLE系统必须⾸先切换到ORACLE⽤户,如下su - oraclea、启动ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>startupSVRMGR>quitb、关闭ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>shutdownSVRMGR>quit启动oracle9i数据库命令:$ sqlplus /nologSQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL> connect / as sysdbaConnected to an idle instance.SQL> startup^CSQL> startupORACLE instance started.2、在双机环境下要想启动或关闭ORACLE系统必须⾸先切换到root⽤户,如下su - roota、启动ORACLE系统hareg -y oracleb、关闭ORACLE系统hareg -n oracleOracle数据库有哪⼏种启动⽅式说明:有以下⼏种启动⽅式:1、startup nomount⾮安装启动,这种⽅式启动下可执⾏:重建控制⽂件、重建数据库读取init.ora⽂件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora⽂件。
2、startup mount dbname安装启动,这种⽅式启动下可执⾏:数据库⽇志归档、数据库介质恢复、使数据⽂件联机或脱机,重新定位数据⽂件、重做⽇志⽂件。
oracle表空间总结(个人笔记总结)
表空间含义:表空间是数据库的逻辑组成部分。
从物理上讲,数据库数据存放在数据文件中;从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成1,oracle 中逻辑结构包括表空间、段、区和块。
说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由oracle 块构成的这样的一种结构,可以提高数据库的效率。
表空间用于从逻辑上组织数据库的数据。
数据库逻辑上是由一个或是多个表空间组成的2,创建表空间:create tablespace data01 datafile 'd:\test\dada01.dbf' size 20m uniform size 128k;或SQL> create tablespace lqb datefile 'e:\lqb.dbf' size 50M autoextend on next 50M maxsize unlimited extend mangement local;-------------extend mangement local;本地管理表空间。
autoextend on next 50M maxsize unlimited 在50M后最大的扩展时没有限制的3,第3步:创建用户并指定表空间*/ create user USERNAME identified by PASSWORD default tablespace USER_DATE temporary tablespace user_temp;-------------temporary 临时的,暂时的4,如何将表移动到指定表空间alter table TABLE_NAME move tablespace TABLESPACE_NAME;如何将索引移动到指定的表空间alter index INDEX_NAME REBUILD tablespace TABLESPACE_NAME;5,改变表空间的状态a,使表空间脱机alter tablespace 表空间名offline; b,使表空间联机alter tablespace 表空间名online; c,只读表空间alter tablespace 表空间名read only; (修改为可写是alter tablespace 表空间名read write;)6, 知道表空间名,显示该表空间包括的所有表select * from all_tables where tablespace_name='表空间名';7,知道表名,查看该表属于那个表空间select tablespace_name, table_name from user_tables where table_name='emp';8,扩展该表空间,为其增加更多的存储空间。
Oracle Secure Backup 学习笔记
一、安装For each Linux media server, ensure that the SCSI Generic (SG) driver is installed echo modprobe sg >> /etc/rc.moduleschmod +x /etc/rc.modulesmkdir -p /usr/local/oracle/backupcd /usr/local/oracle/backup/media_dir/setup要安装oracle安全备份软件,必须执行以下步骤:(1)、以root 用户身份执行以下命令,创建OSB 主目录:mkdir -p /usr/local/oracle/backup(2)、浏览至您的OSB 主目录:cd /usr/local/oracle/backup(3)、确保提供了解压缩实用程序:ln -s /bin/gunzip /bin/uncompress(4)、在您的OSB 主目录中,以root 用户身份启动Oracle 安全备份的安装。
/root/osb-10.4.0.1.0_linux.x64_cdrom110923/setup(5)按提示输入即可二、管理磁带使用的obtool命令行工具,首先创建带库然后创建磁带mkdev -t library -o -a rman:/dev/sg13 lib13mkdev -t tape -o -a rman:/dev/sg7 -l lib13 -d 1 tape1301mkdev -t tape -o -a rman:/dev/sg8 -l lib13 -d 2 tape1302mkdev -t tape -o -a rman:/dev/sg9 -l lib13 -d 3 tape1303使用lsdev查看已经创建的devicelsdev列出每个带库的详细信息:inventory -L lib13查看卷信息:lsvol -L lib13 -l可以通过lsdev命令查看,磁带的状态是否还处于offline状态lsdev -g tape1301现在向磁带tape01载入一个卷,载入完成后,状态就是online状态:loadvol -D tape1301 -m write 11卸载磁带unloadvol -D tape1301三、设置备份Configure: Database Backup Storage Selectors可以在这个菜单下,指定不同的备份类型,备份到不同的磁带驱动,如果磁带写满,自动换带。
Oracle数据库学习笔记_oracle之addconstraint方法添加约束
Oracle数据库学习笔记_oracle之addconstraint⽅法添加约束add constraint ⽅法在已经存在的列名添加约束,语法格式如下:alter table 表名 add constraint 约束名称约束类型(列名)具体⽤法如下:1.主键约束:列被约束为(⾮空、不重复)格式:alter table 表格名称 add constraint 约束名称 primary key (列名)例⼦:alter table emp add constraint ppp primary key (id);2.外键约束:列被约束为引⽤其他表的主键格式:alter table 表名 add constraint 约束名称 foreign key (列名) references 被引⽤的表名称(列名)例⼦:alter table emp add constraint jfkdsj foreign key (did) references dept (id);3.unique约束:列被约束为(不重复)格式:alter table 表名 add constraint 约束名称 unique(列名)例⼦:alter table emp add constraint qwe unique(ename);4.默认约束:让此列的数据默认为⼀定的数据格式:alter table 表名称 add constraint 约束名称 default 默认值 for 列名例⼦:alter table emp add constraint jfsd default 10000 for gongzi;5.check约束:列的数据范围被限制格式:alter table 表名称 add constraint 约束名称 check (列名)例⼦:alter table emp add constraint abcd check(age>20); --例如,年龄列的数据都要⼤于20的。
韩顺平老师oracle视频教程听课笔记
韩顺平老师 oracle教程笔记1.Oracle认证,与其它数据库比较,安装Oracle安装会自动的生成sys用户和system用户:(1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。
具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。
2.Oracle的基本使用--基本命令sql*plus的常用命令连接命令1.conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect]说明: 该命令用来断开与当前数据库的连接3.psssw[ord]说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。
4.show user说明: 显示当前用户名5.exit说明: 该命令会断开与数据库的连接,同时会退出sql*plus文件操作命令1.start和@说明: 运行sql脚本案例: sql>@ d:\a.sql或是sql>start d:\a.sql2.edit说明: 该命令可以编辑指定的sql脚本案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开3.spool说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。
案例: sql>spool d:\b.sql 并输入 sql>spool off交互式命令1.&说明:可以替代变量,而该变量在执行时,需要用户输入。
Oracle分析函数笔记
Oracle分析函数Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。
Oracle从8.1.6开始提供分析函数。
一、基本语法oracle分析函数的语法:function_name(arg1,arg2,...)over(<partition-clause> <order-by-clause ><windowing clause>)说明:1.partition-clause 数据记录集分组2.order-by-clause 数据记录集排序3.windowing clause 功能非常强大、比较复杂,定义分析函数在操作行的集合。
有三种开窗方式: range、row、specifying。
二、常用分析函数1. avg(distinct|all expression) 计算组内平均值,distinct 可去除组内重复数据select deptno,empno,sal,avg(sal) over (partition by deptno) avg_sal from t;DEPTNO EMPNO SAL AVG_SAL---------- ---------- ---------- ----------10 7782 2450 2916.666677839 5000 2916.666677934 1300 2916.6666720 7566 2975 21757902 3000 21757876 1100 21757369 800 21757788 3000 217530 7521 1250 1566.666677844 1500 1566.666677499 1600 1566.666677900 950 1566.666677698 2850 1566.666677654 1250 1566.666672.count(<distinct><*><expression>) 对组内数据进行计数3.rank() 和dense_rank()rank()根据 order by 子句表达式的值,从查询返回的每一行,计算和其他行的相对位置,序号从 1 开始,有重复值时序号不跳号。
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;其中,⼊参为:表名 + ⽤户名,⽤户名可缺省。
MLDN魔乐科技_Oracle课堂笔记
MLDN魔乐科技_Oracle课堂笔记1.sqlplusw命令(窗口形式),sqlplusw不支持编辑,一般在编辑器(记事本)中编辑好了后拷贝进去执行,或用ed命令;2.descdesc [tablename];查看表结构3.show user查看当前用户4.select table_name from tabs显示当前用户下的表名;5.set linesizeset linesize [number];6.set pagesizeset pagesize [number];7.eded命令用来从sqlplusw中打开编辑器来编辑文件(文本文件);8.@执行sql文件@D:\a.txt;@d:\a;(a文件的扩展名为.sql)9.connconn username/pwd@实例名;10.sql标准,其功能:DML(数据操作语言),DDL(数据定义语言),DCL(数据控制语言)11.别名Oracle中指定列别名;(不要指定为中文);12.distinct去除重复记录;13.||字符串连接符;select "我的名字是:" || name from t_user;14.NOT NULL/IS NULL选择列值不为空的记录where collumname IS NOT NULL;相反IS NULL;15.BETWEEN…AND…WHERE COLUMENAME BETWEEN...AND...; 等价于>=,<=,如果是在时间之前,则需将时间''起来;16.大小写oracle中查询值是大小写区分的,但关键字不区分;17.InFieldName in (值1,值2,值3,...值n);NOT IN;18.Like在使用Like时常用的通配符:%,匹配任意长度内容,_,匹配一个长度内容;例:select * from emp where ENAME Like '_M%';表示第二个字母为M的名字.19.>,<,>=,<=,<>,!=用法20.order byOrder by语句,放在SQL语句最后;desc(从大到小)/asc(从小到大)(默认)21.单行函数字符/数值/日期/转换/通用函数;(1).字符:UPPER()变大写,LOWER()变小写,INITCAP()将单词第一个字母大写;字符长度LENGTH(),字符串截取SUBSTR(),字符串替换REPLACE()其中substr()的第二个参数即起始位置索引为0或1效果都是从第一个字符开始,负数是从右边开始;(2).数值:四舍五入ROUND(),截取TRUNC(),求模MOD();ROUND(23.45,2),TRUNC(23.45,-1),MOD(10,3);(3).日期:MONTHS_BETWEEN(),两个日期之间的月数;MONTHS_BETWEEN(DA TE1,DA TE2)ADD_MONTHS(),下月的今天;NEXT_DA Y(),下一个的今天日期;LAST_DAY(), 给定日期的最后一天日期;(4).转换:TO_CHAR(),TO_NUMBER(),TO_DA TE();fm去除前导0,例如:to_char(sysdate,'fmyyyy-mm-dd') 得出结果2009-1-2(本应为2009-01-02).千位分隔符(格式字符用9表示),货币前缀($美元,L本地币种)to_char(123456,'$99,999')美元to_char(123456,'L99,999')本地币种(5).通用:如果有NULL类型数据参与运算,必需用NVL()转换成特定值再计算;如:NVL(filed1,'0')DECODE()函数,用于替换;DECODE(field/expression,1,"one",2,"two")表示如果field/expression如果是1的话,则替换为one,是2的话替换为two;22.ORACLE用户(1)超级管理员:sys/change_on_install;(2)管理员:system/manager;(3)普通用户:scott/tiger;23.左、右(外)连接默认左连接where a.field1(+) = b.field2"+"在左边表示右连接,在右边表示左连接cross join产生笛卡尔积;标准语法:select table1.*,table2.* from table1,table2 where table1.no=table2.no;24.sql1999select table1.*,table2.* from table1[cross join table2][natural join table2][join table2 using collumname][left|right|full outer join table2]on table1.collum1 = table2.collum2where 1=1group by 分组条件having 分组条件order by...注:where子句中不能带组函数;25.组函数(1).count();(2).max();(3).min();(4).sum();(5).avg();26.分组统计group by27.子查询示例:select * from emp where sal > (select sal from emp where empno = 7654)使用分类:单列(用得最多),单行,多行;子查询的三种操作:(1) in 在结果集之中;(2) any=any即=,>any 比最小值的要大的结果集,<any比值最大的要小的结果集;(3) all>all,比最大的值要大,<all,比最小的值要小;格式:where field1 > all(子查询)28.事务一个窗口一个会话,如没有提交互不影响;commit;提交;rollback;回滚;死锁,等待,一个session没有提交,其它session不能处理,要等待前一个session提交了再进行处理;29.子查询、外连接练习select e.job,count(e.empno)from emp e right outer join (select job from emp group by job having min(sal) > 1500) emon e.job = em.jobgroup by e.job;select e.job,count(e.empno)from emp e ,(select job from emp group by job having min(sal) > 1500) emwhere e.job(+) = em.jobgroup by e.job;select e.job,count(e.empno)from emp ewhere e.job in (select job from emp group by job having min(sal) > 1500)group by e.job;29.表的建立与删除Oracle中的主要数据类型;varchar,varchar2为255字符;number(m,n),---float,number(n)----intdateclob,blog 4G(1)复制表create table tablename as select * from emp;(2)复制表结构(加永不成立的where条件)create table tablename as select * from emp where 1==2;(3)创建表create table tablename (字段1 类型1 default '默认值',字段2 类型2,...字段n 类型n)(4)修改表删除表: drop table tablename;增加列:alter table tablename add(columnname 类型default '默认值',columnname 类型default '默认值')修改列:alter table tablename modify(columnname 类型default '默认值')修改列名:alter table rename column columnname to newcolumnname重命名表:rename tablename1 to tablename2;只能用于oracle截断表:truncate table tablename;与delete类似,但直接释放,不能回滚;30.约束的分类与使用作用:保证数据库中数据的完整性;分类:主键(PRIMARY KEY),唯一(UNIQUE),检查(CHECK),非空(NOT NULL),外键约束(FOREIGN KEY);其中,前四种约束为单表约束,外键约束为多表约束;通过constraint指定约束:constraint person_pid_pk PRIMARY KEY(pid)constraint person_sex_ck CHECK(sex in ('男','女'))外键:强制删除父表:一般是先删除子表,再删除父表,但技术上可以实现强制先删除父表(同时删除从表相关约束):DROP TABLE tablename CASCADE CONSTRAINT;(一般不使用)强制删除从表数据:删除父表数据时,从表相应有约束的记录也删除, 需在创建表约束时这样处理:CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES persion(pid) ON DELETE CASCADE示例:CREA TE TABLE T_PARENT(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10));CREA TE TABLE T_CHIRLD(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10),PARENT_ID NUMBER(10),CONSTRAINT CHIRLD_PARENT_FK FOREIGN KEY(PARENT_ID) REFERENCES T_PARENT ON DELETE CASCADE);增加约束:ALTER TABLE tablename ADD CONSTRAINT 约束名PRIMARY KEY(pid);示例:alter table T_CHIRLDadd constraint CHIRLD_PARENT_FK foreign key (PARENT_ID)references T_PARENT (ID) on delete cascade;修改约束:ALTER TABLE tablename MODIFY CONSTRAINT 约束名PRIMARY KEY(pid);字段名_PK,字段名_UK,字段名_CK,字段名_NK,从表字段名_父表字段名_FK删除约束:ALTER TABLE tablename DROP CONSTRAINT 约束名;31.表的关联查询:并(UNION),交(INTERSECT),差(MINUS)UNION:将多个查询的结果组合到一个查询结果中,没有重复;UNION ALL:将多个查询的结果组合到一个查询结果中,可以有重复;INTERSECT:返回两个结果集的公共部分;MINUS:返回两个结果集的差值;(左边表减右边表)示例:select * from emp UNION select * from emp2;32.ROWNUM伪列的作用自动编号,存在于每一个查询中,使用情境:只想显示前五条记录,则只需加条件:ROWNUM <= 5;常用于分页操作如果想取得中间记录的数据,不能用ROWNUM(BETWEEN AND),只能用子查询:例:查出第五条到第十条记录;SELECT * FROM (SELECT ROWNUM rn,empno,ename,job FROM emp WHERE ROWNUM<=10) tempWHERE temp.rn>=5;33.序列的使用用途:用于自动增长;创建序列:CREA TE SEQUENCE seqname[INCREMENT BY n][START WITH n] --START WITH默认从1开始;[{MAXV ALUE n|NOMAXV ALUE}][{MINV ALUE n|NOMINV ALUE}][{CYCLE|NOCYCEL}][{CACHE|NOCACHE}]示例:create sequence myseq;使用序列:insert into tablename (next,curr) values (myseq.nextval,myseq.currval);删除序列:DROP SEQUENCE seqname;34.视图创建语法:CREA TE OR REPLACE VIEW 视图名称AS 子查询其中子查询是一个复杂的select语句视图创建好后,可以作为一张表来查询使用;以上创建的视图可以执行UPDA TE,且可将原表进行修改;但实际应用用,视图是只读的,可以需要在创建视图的时候加上以下参数:WITH CHECK OPTION 不能更新视图条件字段,但能更新其它非条件字段;WITH READ ONLY表示只读,不能更新;删除语法:DROP VIEW 视图名称;35.同义词,用户管理,权限分配与撤销,数据库的备份同义词(只适用于oracle):作用:通过同义词可访问不同用户下的表,例如,scott用户可以访问sys用户下的dual表;创建同义词:CREA TE SYNONYM 同义词名称FOR 用户名.表名称;示例:create synonym emp for scott.emp;删除同义词:DROP SYNONYM 同义词名称;用户管理创建用户:CREA TE USER 用户名IDENTIFIED BY密码;为用户授权:GRANT 权限1,权限2,... TO 用户;示例将创建session的权限赋给testuser,以使得其可以连接到数据库:GRANT CREA TE SESSION TO testuser;赋予角色给用户testuser:GRANT CONNECT,RESOURCE TO testuser;修改用户密码:ALTER USER 用户名IDENTIFIED BY密码;使用户密码失效:ALTER USER 用户名PASSWORD EXPIRE;锁住用户:ALTER USER 用户名ACCOUNT LOCK;解锁用户:ALTER USER 用户名ACCOUNT UNLOCK;将某张表的读取,删除权限赋给用户testuser:GRANT SELECT,DELETE ON scott.emp TO testuser;回收权限:REVOKEREVOKE 权限ON 用户.表名称FROM 用户;示例:REVOKE SELECT,DELETE ON scott.emp FROM testuser;数据库的备份:导入导出命令EXP,IMP36.可变数组类似于嵌套表,一般开始过程中不用37.数据库设计范式第一范式:每一个字段不可再分;第二范式:实现多对多的关联;第三范式:实现一对多的关联;(用得最多90%以上的项目)注:以上三范式在设计数据库时仅作参考,数据库设计的维一原则是:表关联尽可能少,SQL 尽可能简单;37.嵌套表(ORACLE特有,使用复杂,一般实际开发中不使用)在一个表中还包含另一个子表; 先定义类型.。
Oracle优化笔记
Oracle优化笔记业务是否⽤最优的⽅式来运⾏。
如果不是最优的⽅式那就对SQL进⾏优化。
查看数据库的执⾏计划技术⽅向上,应多考虑性能⽅⾯的问题积极参与到业务层⾯,从业务⾓度思考问题。
导致性能问题的可能原因1,表没有正确的创建索引---错误的执⾏计划2,表没有及时的分析---错误的执⾏计划3,热块---数据块的争⽤(反向索引?)4,锁的阻塞---业务设计缺陷、5,SQL解析消耗⼤量CPU---变量绑定6,低效的SQL---SQL⾃⾝的问题7,数据库整体负载过程---架构设计的问题性能问题的定位原则尽可能从⼩范围分析问题1,SQL层如果能从定位到SQL,就不要从会话层⾯分析已经定位到了某条SQL语句有问题,就针对该语句着⼿。
使⽤⼯具和执⾏计划来分析该语句,如使⽤:10053,10046(查看某条语句资源消耗情况)2,会话层如果能定位到会话,就不要从系统层⾯分析:V$SESSION, V$SESSTAT, V$SESSION_WAIT, V$SQL, V$LOCK SQL_TRACE3,系统层如果⽆法定位任何性能问题,从系统层⾯⼊⼿AWR(STATSPACK), OS tools(top, iostat)锁没有并发就没有锁Oracle中锁的分类:Enqueues--队列类型的锁,通常和业务相关的简写: enqLatches---系统资源⽅⾯的锁,⽐如内存结构,SQL解析锁的原则:1,只有被修改时,⾏才会被锁定,select操作不会在数据表中加锁。
2,当⼀条语句修改了⼀条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升级。
3,当某⾏被修改时,它将阻塞别⼈对它的修改。
4,当⼀个事务修改⼀⾏时,将在这个⾏上加上⾏锁(TX),⽤于阻⽌其它事务对相同⾏的修改。
5,读永远不会阻⽌写。
6,读不会阻塞写,但有唯⼀的⼀个例外,就是select ... for update.7,写永远不会阻塞读8,当⼀⾏被修改后,Oracle通过回滚段提供给数据的⼀致性读。
oracke数据库笔记
Orcal数据库SQL:结构化查询语言(Structured Query Language)DDL(数据定义语言Data Definition Language)[自动提交,系统自动commit;]create table table_name;alter table;drop tablecolumn(列、datatype(数据类型)、width(宽度)、constraints(约束)DML(数据操作语言Data Manipulation Language)table datainsert(增加)、delete(删除)、update(修改)rowTCL(事务控制语言Transaction Control Language)Commit rollback savepoint提交回滚保留点确认取消DQL(Data Query Language数据查询语言)Select[选择]Projection[投影]Join[连接](掌握:多表查询)DCL(Data Control Language数据控制语言)grant(授权)revoke(回收权限)例:表格如下:姓名性别年龄专业出生日期(年月日时分秒)【日期型】学号(约束)约束:限制条件,不能重复数据库管理系统:(DBMS Data Base Management System)sqlplus:数据库连接命令bsh中【echo $ORACLE_SID;环境变量(修改值:ORACLE_SID= hiloo ; export ORACLE_SID)】csh中【stenv ORACLE_ID hiiloo ; echo $ORACLE_SID】数据文件、同志文件、控制文件数据库启动后,即创建了一个实例,一个数据库对应一个实例,连接数据库,即连接一个实例(ORACLE_SID)ORCAL_HOME:ORCAL产品的安装目录ORCAL_SID:数据库所对应的实例(instance)用desc(describe的缩写,在sql中不能缩写)显示表结构,包括列名(column name)、非空(not null)、数据类型(data type)SQL> DESC s_dept(表名:s_dept)>not null列必须包含数据>列的数据类型和长度number(p,s)varchar2(s)char(s)date远程登录:telnet 172.16.106.151sqlplus username/password记住如下命令:1、select sysdate;2、alter session set nls_language=american; //修改语言3、alter session set nls_date_format="dd-mon-rr hh24:mi:ss"; //日期格式设置4、在cmd中:¥:set nls_lang=…simplified Chinese_CHINA.ZHS16GBK‟$:set nls_lang=american_americ.utf85、create user Mr_fei identified by dalor; //(创建一个新角色:(用户名:Mr_fei;密码:dalor,如果密码是数字,要加双引号)6、grant connect,resource to Mr_fei;//(授权给新角色)7、conn Mr_fei;(连接到新角色)8、clear scr; //清屏9、col column_name for a10; //【设置某列的长度;col(列)、column_name(列名)、a10(列的新长度,a不能去掉)】10、环境变量更改:nls_lang=‘simplified Chinese_CHINA.ZHS16GBK‟11、将上课写的数据库相关操作保存到指定文件spool d:\\1.sql 新建spool off 保存退出注意:如果命令敲错了,可以输入edit进入Vi修改或输入新命令;保存退出后,输入“”运行查询命令;输入“L”可以查看你输入的命令。
Oracle 学习笔记
Oracle数据库→表空间→用户→表表空间:包含表、视图、索引段:包含数据段、索引段、回退段、临时段数据块:是Oracle中最小的逻辑存储单元创建表空间:create tablespace rootspacedatafile 'rootfile' size 1000mautoextend on创建用户:create user root用户名rootidentified by root 密码rootdefault tablespace rootspace 默认表空间rootspacetemporary tablespace temp 临时表空间tempCREATE USER usernameIDENTIFIED BY password[DEFAULT TABLESPACE tablespace][TEMPORARY TABLESPACE tablespace];授予用户username【用户名】权限:·grant connect to username; CONNECT角色允许用户连接至数据库,并创建数据库对象·grant resource to username; RESOURCE角色允许用户使用数据库中的存储空间·grant create sequence to username; 此系统权限允许用户在当前模式中创建序列,此权限包含在CONNECT角色中·grant select on test to username; 允许用户查询 TEST 表的记录·grant update on test to username; 允许用户更新 TEST 表中的记录·grant all on test to username; 允许用户插入、删除、更新和查询TEST 表中的记录·alter user username identified by newpassword;用于修改用户口令·drop user username cascade; 删除用户撤销用户权限:Revoke connect from username;设置显示行长度:Set linesize 12;伪列rownum:Select rownum,name from table;………………………………>Rownum name1 haha2 xxxx--创建表tb_stucreate table tb_stu(stu_id char(12) primary key,stu_name varchar(50) not null,sex varchar(5),birthday date)--查询表tb_stuselect * from tb_stu;--在表中插入tb_stu记录insert into tb_stu(stu_id,stu_name,sex,birthday) values('123456789012','李四','男',to_date('2009-9-9','yyyy-mm-dd'));--事务提交commit;--事务回滚rollback;--根据stu_name查询所有信息select * from tb_stu where stu_name='田七'--根据stu_id删除一条记录delete from tb_stu where stu_id=123456789015--根据stu_id修改一条记录update tb_stu set sex='女',stu_name='梁朝伟'where stu_id='123456789013';--to_date 修改存入数据库中日期的格式update tb_stu set birthday=to_date('2009-10-5','yyyy-mm-dd') wherestu_id='123456789014'--to_date 查询数据库中日期按指定格式输出select* from tb_stu where birthday between(to_date('2009-10-1','yyyy-mm-dd')) and (to_date('2009-12-1','yyyy-mm-dd'))--虚列 rownum 数据库中实际并不存在对符合条件的查询结果的编号select rownum,stu_id,stu_name,sex,birthday from tb_stu where sex='男';--在查询结果中进行查询select * from (select rownum rn,stu_id,stu_name,sex,birthday from tb_stu where sex='男') where rn<3;--创建表tb_employeecreate table tb_employee(em_id number primary key,em_name varchar(50) not null,sex varchar(2),birthday date,sal number(20,2))--向表tb_employee中插入数据insert into tb_employee values(1,'梁朝伟','男',sysdate,11000000);--按字段升序排列(默认的为升序)select * from tb_employee where sal>200order by sal asc--按字段升序排列select * from tb_employee where sal>200order by sal desc--取别名:将查询的字段按一个特定的字段名输出select em_name,((sal-2000)*0.2) 税收from tb_employee where sal>2000;--联合字段,将查询出的多个字段或者是字符串连接在一起,以一个字段输出,用“||”连接select em_name||'的应该缴税: '||((sal-2000)*0.2) as税收from tb_employee where sal>2000order by税收desc;--将em_name为“梁朝伟”的记录的birthday字段,按指定的日期格式进行修改update tb_employee set birthday=to_date('1969-1-1','yyyy-dd-mm') where em_name='梁朝伟';--查询birthday字段不为当前系统时间并且不为空的值--不等于的三种书写方式(!=,^=,<>)select * from tb_employee whereto_char(birthday,'yyyy')^=to_char(sysdate,'yyyy');-- or 连接的多条件“或”查询select * from tb_employee where birthday is null or em_id=1;--between 3 and 5 查询条件为:大于等于3同时小于等于5select * from tb_employee where em_id not between3and5;--查询条件为:大于其中任意一个(只要大于其中的某一个就为满足条件)select * from tb_employee where em_id > any(1,3,5);--查询条件为:小于其中所有的(只有比括号中所有的数字都小才为满足条件)select * from tb_employee where em_id < all(3,5);--下划线表示任意的以个字符select * from tb_employee where em_name like'周__';-- % 表示任意多个字符select * from tb_employee where birthday like'%';--快速创建和tb_stu相同的表结构的表tb_stu_temp1create table tb_stu_temp1as select * from tb_stu where1=2;--将表tb_stu按条件查询的结果插入表tb_stu_temp1中insert into tb_stu_temp1(select * from tb_stu);--查询所有的表select * from tab ;--根据表名查询表select * from tab where tname='tb_stu';如果2个表达式主键管理的:主表——子表先插入主表的数据,然后子表删除:先删从表数据,然后主表。
尚学堂马士兵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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.用insert语句进行行数据的迁移Insert into 表名(列,列) select 列,列from emp where 条件2.用update更新数据(使用子查询):希望员工scott的岗位,工资,补助与smith员工一样?update emp set (job,sal,comm)=(select job,sal,comm. From emp where ename=‟SMITH‟) where ename=‟SCOTT‟;3.事务(1)锁(2)提交事务(3)回退事务(一开始就做保存点(savepoint))(4)事务的几个重要操作1)设置保存点:savepoint a2)取消部分事务:rollback to a3)取消全部事务:rollback(5)只读事务:set transaction read only(当前用户能看到之前的操作,若其他用户进行更新,该用户之后的操作都不能看到更新)(6)字符函数(1)lower(char):将字符串转化为小写的格式(2)upper(char): 将字符串转化为大写的格式(3)length(char):返回字符串的长度(4)substr(char,m,n):取字符串的子串,从m开始取,取n个(5)例:以首字符大写的方式显示所有的员工的姓名:(1)完成首字母大写:select upper(substr(ename,1,1)) from emp;(2)完成后面字母小写:select lower(substr(ename,2,length(ename)-1)) from emp;(3)合并:select upper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1))from emp;(6)replace(char1,search_string,replace_string)(7)instr(char1,char2,[,n[,m]])—取子串在字符串的位置(8)例:显示所有员工的姓名,用”我是A”替换所有”A”:select replace(ename,‟A‟,‟我是A‟) from emp;(7)数学函数(1)round(n,[m]):用于四舍五入(2)trunc(n,[m]):用于截取数字(3)mod(m,n):取模(4)floor(n):返回<=n的最大整数(5)ceil(n):返回>=n的最小整数(6)例:显示在一个月为30天的情况所有员工的日薪金,忽略余数:selectfloor(sal/30),ename from emp;(8)日期函数(1)sysdate(2)add_months(d,n)(3)last_day(d):返回指定日期所在月份的最后一天例:返回在八个月前雇佣的员工(已经入职8个月多的员工):select * from emp where sysdate>add_months(hiredate,300);例:对于每个员工,显示其加入公司的天数:select trunk(sysdate-hiredate) “入职天数”,ename from emp;例:找出各月倒数第3天受雇的所有员工:select hiredate,ename from emp where last_day(hiredate)-2=hiredate;(9)转换函数(1)to_char :select ename,to_char(hiredate,‟yyyy-mm-dd hh24:mi:ss‟) from emp;(2)显示1980年入职的所有员工:select * from emp whereto_char(hiredate,‟yyyy‟)=1980(3)显示所有12月份入职的员工:select * from emp where to_char(hiredate,‟dd‟)=12(10)to_date(11)sys_context—系统函数:1)terminal:2)language3)db_name:4)nls_date_format5)session_user6)current_schema:7)host:select sys_context(…userenv‟,‟db_name‟) from dual;管理数据库的用户主要是sys和system,主要的区别(1)最重要的区别,存储的数据的重要性不同:所有oracle的数据字典的基表和视图都存放在sys用户中,sys用户拥有dba,sysdba,sysoper角色或权限,system用于存放次一级的内部数据,如Oracle的一些特性或工具的管理信息,system用户拥有dba,sysdba角色或系统权限(2)其次的区别,权限的不同:sys用户必须以as sysdba或as sysoper形式登陆,不能以normal方式登陆数据库(3)管理初始化参数(1)显示初始化参数:show parameter命令数据库(表)的逻辑备份与恢复(1)物理备份可在数据库open的状态下进行也可在关闭数据库后进行,但是逻辑备份和恢复只能在open的状态下进行(2)导出:导出表,方案,数据库,exp,常用选项(userid,tables,owner,full=y,inctype,rows,file)(3)导出自己的表:exp userid=scott/tiger@accp tables=(emp) file=d:\e3.dmp(4)导出其他方案的表:需要有dba的权限(5)导出表的结构:exp userid=scott/tiger@accp tables=(emp) file=d:\e3.dmp rows=n(6)直接导出方式:exp userid=scott/tiger@accp tables=(emp) file=d:\ec.dmp direct=y—速度快,当数据量大时,可以考虑这种方法(7)导出方案:导出自己的方案:exp scott/tiger@myral owner=scotr file=d:\scott.dmp(8)导出其他方案:需要dba的权限或exp_full_database的权限(9)导出数据库:exp userid=system/manager@myor full=y inctype=complete file=d:x.dmp导入(1)Import视图记载了例程启动后的相关信息数据字典和动态性能视图(1)数据字典是oracle数据库中最重要的组成部分,它提供了数据库的ixie系统信息:数据字典记录了数据库的系统信息,它是只读表和视图的稽核,数据字典的所有者是sys用户,用户只能在数据字典上执行查询操作,而其维护和修改是由系统自动完成的(2)动态性能:用于记录当前例程的活动信息(3)user_tables:显示当前用户所拥有的所有表,all_tables :显示当前用户可以访问的所有表,不仅返回当前用户方案的所有表,还会返回当前用户可以访问的其他方案的表,dba_tables:显示所有方案拥有的数据库表,必须有dba权限(4)通过查询dba_user可以显示所有数据库用户的详细信息,通过查询数据字典视图dba_sys_privs可以显示用户所具有的系统权限,dba_tab_privs:显示用户具有的对象权限,dba_col_privs可以显示用户具有的列权限,dba_role_privs可以显示用户所具有的角色(5)显示当前用户可以访问的所有数据字典视图:select * from dict where comments like…%grant%‟;(6)显示当前数据库的全称:select * from global_name;表空间(1)表空间是数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中,从逻辑上讲,数据库则是存放在表空间中,表空间由一个或是多个数据文件组成(2)Oracle中逻辑结构包括表空间,段,区,块(3)数据库逻辑上是由一个或多个表空间组成的,表空间可以达到以下作用(1)空值数据库占用的磁盘空间(2)dba可以将不同数据类型部署到不同的位置,这样有利于提高i/o性能,同时利于备份和恢复等管理操作(4)建立表空间:create tablespace (有create tablespace的系统权限即可)(5)建立数据表空间:create tablespace data01 datafile …d:\test\data01.dbf‟ size 20m uniform size128k(6)改变表空间的状态(1)使表空间:alter tablespace 表空间名offline(2)使表空间联机:alter tablespace 表空间名online(3)只读表空间:alter tablespace query_data read only(4)使表空间可读写:alter tablespace 表空间名read write删除表空间(1)drop tablespace 表空间including contents and datafiles约束:约束用于确保数据库数据满足特定的商业规则(1)not null:修改约束:alter table 表名modify 列: not null(2)unique:修改约束:alter table 表名add constraint 约束名unique(列)(3)primary key(4)foreign key:列char(8) references 主表(列)(5)check:列number(10) check (列between 1 and 20))或列number(10) check (列in (…值‟,…值‟))(6)删除约束:alter table 表名drop constraint 约束名称(要强制删除的话可以在最后加cascade)(7)显示约束信息:user_constranints,显示约束列:user_cons_columns(8)列级定义:是在定义列的同时定义约束(9)表级定义:在定义了所有列后,再定义约束索引(1)单列索引:create index 索引名on 表名(列名);(2)复合索引:create index emp_idxl on emp (ename,job);(3)使用原则:(1)在大表上建立索引才有意义(2)在where子句或是连接条件上经常引用的列上建立索引(3)索引的层次不要超过4层索引缺点分析(1)建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引(2)更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性(3)很少或从不引用的字段(4)逻辑型的字段,如男或女等显示表的所有索引(1)select index_name,index_type from user_indexes where table_name=‟表名‟;显示索引列(1)select table_name ,column_name from user_ind_columns whereindex_name=‟IND_ENAME‟;(2)回收某个用户的系统权限后,级联的用户的系统权限不会被收回,而回收某个用户的对象权限后,级联的用户的对象权限则也会被收回角色(预定义+自定义):角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理。