本文目录一览:
- 1、oracle数据库轻松学习方法(oracle学习资料)
- 2、新手必须了解的oracle入门知识
- 3、Oracle数据库基本知识
- 4、Oracle的数据字典
- 5、Oracle数据库基础知识:SELECT语句
- 6、Oracle数据库基础的内容简介
- 7、OraclePLSQL基础知识及其相关概念
- 8、如何快速的学习oracle
- 9、Oracle数据库开发基础教程的内容简介
oracle数据库轻松学习方法(oracle学习资料)
如何学习Oracle?
经常有一些Oracle的初学者问到这个问题,这里算是一个统一答复。
1、如果有一定的数据库基础,知道SQL是怎么回事,即使写不出来简单的SQL,但可以看动它们,你就可以跳到2。否则请先看一下数据库基础和SQL语言,不需要很深,更不需要去记忆那些复杂的SQL命令,这些可以留在以后边应用边学习、记忆。
2、要想学好ORACLE,首先要学习ORACLE的体系结构,现在你不需要深入理解它们,但要分清几个关键的概念:
instance&database,memorystructure,process&thosefiles,suchasdatafile,controlfile,initparameterfileetc
以及database,tablespace,datafile和tablespace,segmnet,extent&block它们之间的关系。
当然还要分清undotablespace&redologfile等,对于很多初学者来说,能够对这些概念有个较为清晰的认识并不是一件容易的事,而这些并非Oracle的全部。
3、2是有关ORACLE的一些基本概念,下面要学习的是一些简单的的实际操作,就是如何去管理ORACLE数据库,当然不是管理全部的ORACLE。在此过程中你将对SQL和ORACLE体系结构有个更深入的了解。
4、到了这一步你基本上算是初步掌握了ORACLE,下面将要根据你的方向来具体学习其它的ORACLE知识了。如果你是开发人员,则需要更多地去学习PL/SQL以及DEVELOPER,而这将是一门新的课程。如果你是一名DBA,请继续。
5、现在你可以根据自己的实际情况,进行有选择的学习,也就是说下面的内容没有特别顺序要求。可以选择深入学习ORACLE的管理、备份与恢复、性能调整、网络等。当然在学习这些知识的过程中,如果有实际的工作更好,这样你可以在实际中成长,学会TROUBLESHOOTING。
6、当然在学习的过程中,你可以在网站或论坛中与他人进行交流,可以看别人的一些经验文章,也可以自己写一些心得体会。
在此也希望你能早日好学好你的oracle!
新手必须了解的oracle入门知识
oracle入门知识
一个表空间只能属于一个数据库每个数据库最少有一个控制文件(建议 个 分别放在不同的磁盘上)
每个数据库最少有一个表空间(SYSTEM表空间)
建立SYSTEM表空间的目的是尽量将目的相同的表存放在一起 以提高使用效率 只应存放数据字典
每个数据库最少有两个联机日志组 每组最少一个联机日志文件
一个数据文件只能属于一个表空间一个数据文件一旦被加入到一个表空间中 就不能再从这个表空间中移走 也不能再加入到其他表空间中
建立新的表空间需要建立新的数据文件
MIT后 数据不一定立即写盘(数据文件)
一个事务即使不被提交 也会被写入到重做日志中
oracle server可以同时启动多个数据库
一套操作系统上可以安装多个版本的ORACLE数据库系统(UNIX可以 NT不可以)
lishixinzhi/Article/program/Oracle/201311/16610
Oracle数据库基本知识
Oracle数据库基本知识
Oracle Database,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。本文为大家分享的是Oracle数据库的基本知识,希望对大家有所帮助!
它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。
介绍
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
Oracle数据库最新版本为OracleDatabase 12c。Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。
就业前景
从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。
其一、就业面广:ORACLE帮助拓展技术人员择业的广度,全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位,大学生在校期间兴趣广泛,每个人兴趣特长各异,不论你想进入金融行业还是电信行业或者政府机构,ORACLE都能够在你的职业发展中给你最强有力的支撑,成为你最贴身的金饭碗。
其二、技术层次深:如果期望进入IT服务或者产品公司,Oracle技术能够帮助提高就业的深度。Oracle技术已经成为全球每个IT公司必选的软件技术之一,熟练掌握Oracle技术能够为从业人员带来技术应用上的优势,同时为IT技术的深入应用起到非常关键的作用。掌握 Oracle技术,是IT从业人员了解全面信息化整体解决方案的基础。
其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。
Oracle数据库漏洞分析:无需用户名和密码进入你的数据库
一般性的数据库漏洞,都是在成功连接或登录数据库后实现入侵;本文介绍两个在2012年暴露的Oracle漏洞,通过这两种漏洞的结合,可以在不掌握用户名/密码的情况下入侵Oracle,从而完成对数据的窃取或者破坏。这两个漏洞就是CVE-2012-1675和CVE-2012-3137。
引言
国内外很多重要的系统都采用Oracle作为数据存储的数据库;在Oracle中存储着企业或政府大量敏感的信息,在金钱或政治的诱导下,内外部黑客会想法利用管理、网络、主机或数据库的自身漏洞尝试入侵到数据库中,以达到自身的目的。
本文的作者通过对Oracle俩种漏洞的组合研究,设计了一套在不掌握用户名/密码的方式入侵到Oracle中;这种方法,比传统的需要登录到数据库中的入侵方法,具有更大的安全隐患和破坏性。
本文希望通过对这两个漏洞和攻击方法的介绍,能够引起相关人员的重视,完善对数据库安全的措施。
1、概要介绍
本文提供的方法是基于漏洞CVE-2012-1675和CVE-2012-3137对oracle数据库的攻击测试的方法。
CVE-2012-1675漏洞是Oracle允许攻击者在不提供用户名/密码的'情况下,向远程“TNS Listener”组件处理的数据投毒的漏洞。攻击者可利用此漏洞将数据库服务器的合法“TNS Listener”组件中的数据转向到攻击者控制的系统,导致控制远程组件的数据库实例,造成组件和合法数据库之间的中间人攻击、会话劫持或拒绝服务攻击。
CVE-2012-3137漏洞是Oracle Database 10g/11g身份验证协议实现中存在一个设计缺陷,攻击者无需认证即可远程获取数据库用户密码哈希相关数据,从而可以离线暴力破解用户密码,进一步控制数据库系统。
我们通过如下的步骤和过程可以实现对Oracle的入侵:
(1)利用CVE-2012-1675进行TNS劫持,在监听下利用远程注册,注册同名数据库实例;
(2)新登陆的用户,在TNS的负载均衡策略下,有可能流量登录到伪造的监听服务上;
(3)该监听服务对用户的登陆过程进行监控,并将相关数据流量转发到真实的数据库上;
(4)利用CVE-2012-3137获得通讯过程中的认证相关信息;
(5)对认证相关信息进行离线的暴力破解,获得登陆的密码;
(6)试用破解的用户名/密码登陆Oracle,完成对Oracle中数据的访问;
2、通过CVE-2012-1675进行TNS劫持
该漏洞存在于Oracle的所有版本,并且Oracle至今仅是发布了警告性通知,并未提供解决方案。
要想利用CVE-2012-1675漏洞做TNS劫持,首先需要了解TNS机制。如下图所示oracle 通过在本地解析网络服务名到目标主机IP地址,服务端口号,目标数据库名,把这些信息发送到oracle服务器端监听程序,最后再由监听程序递送DBMS。
其中关键点在于监听会按照目标数据库名递送到名称正确的数据库。那么如果一个监听下有2个同名数据库。监听将自动按照负载均衡把这次访问发送到负载低的数据库上,进行连接访问。数据库注册到监听的方法就决定了,能否同时注册同名数据库在同一个监听下。注册方式分为本地注册和远程注册,通过修改参数可以调整为远程注册。
下面是一段可用的TNS劫持的过程:
1.在劫持机上创建一个和目标数据库实例同名的数据库实例。
2.在劫持机上修改 tnsnames.ora 文件
添加
listener_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=目标机器IP)(PORT=目标机器端口)))
3.在劫持机上用SQL*Plus 顺序执行下面步骤。
1.$ sqlplus / as sysdba
2. SQL> ALTER SYSTEM SETREMOTE_LISTENER='LISTENER_NAME';
3. SQL> ALTER SYSTEM REGISTER;
4.多个客户端,向数据库发起登录。会劫持到一部分客户端的登录信息。
最终达到效果如下图所示:
按照猜想同一个监听下有2个同名实例。客户端访问监听,监听按照客户端中的数据库名信息分配数据库,由于监听下有2个同名数据库,客户端链接很可能会被分配到劫持者的数据库实例下,再通过配置劫持者的本地监听把客户端请求指回原数据库。结构图如下:
测试客户端链接196次。目标数据库实例获得113次,劫持数据库实例获得83次基本满足负载均衡的假设。(注上面实例是local server 下面实例是 remote server)
通过以上方式我们可以截获约一半左右客户端发送到服务器的合法链接。其中获得了服务器IP、端口号、数据库位置、实例名、登录用户名等一系列明文信息和4组密文信息(AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA)。
3、通过CVE-2012-3137进行密码破解
CVE-2012-3137受影响的数据库版本有11.2.0.3,11.2.0.2,11.1.0.7,有使用了SHA-1加密算法的10.2.0.5和10.2.0.4,还有使用了SHA-1的10.2.0.3(运行在z/OS下)版本。
虽然这个漏洞在11.2.0.3中已经解决,但是仅仅数据库客户端和服务器都升级到11.2.0.3并且sqlnet.ora文件中增加SQLNET.ALLOWED_LOGON_VERSION=12才有效。
正如CVE-2012-3137所描述Oracle为了防止第三方通过网络获取登录信息包。而对密码进行了加密处理。本部分只以oracle11.1密码如何破解为例进行说明。
在发起连接之后(oracle牵手完成),客户端和服务器经过协商确定要使用的验证协议。要完成这个任务,客户端首先向数据库发送一个包。包中包含客户端主要信息和所请求的加密方式。数据库确认加密方式有效后,发送一个确认服务包如下图所示:
在通过安全网络服务完成任何所要求的协议之后,数据库用户被O3logon(oracle验证方式) 进行验证,这个协议执行一个序列来向数据库证明客户端拥有密码。为了避免网络第三方截获到密码。首先客户端发送用户名到数据库来表明用户身份。数据库端根据加密协议,其中96位的作为数据库端密钥,20位的作为偏移量,它对每个连接都是不同的。一个典型的数据库端发给客户端的密钥如下:
AUTH_SESSKEY.....COCDD89FIGODKWASDF……………………
客户端根据加密算法向服务器端发送96位的客户端密钥和64位的密码密钥。服务器端计算客户端传入的密码密钥。如果计算后密码密文和数据库中存储的16位密码密文一致则验证通过。
根据这个过程可知上面TNS劫持包中取得的加密信息:AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA这四个值是解密的关键。我们把他们按照SHA1,MD5,AES192进行一系列处理。最终通过数据字典碰撞得到密码明文。
下面这段网上公布的一段示例代码,这段代码与笔者的思路不完全相同,但也能大概地说明这个漏洞的攻击过程:
import hashlib
from Crypto.Cipher import AES
def decrypt(session,salt,password):
pass_hash= hashlib.sha1(password+salt)
key =pass_hash.digest() + '\x00\x00\x00\x00'
decryptor= AES.new(key,AES.MODE_CBC)
plain =decryptor.decrypt(session)
returnplain
session_hex ='EA2043CB8B46E3864311C68BDC161F8CA170363C1E6F57F3EBC6435F541A8239B6DBA16EAAB5422553A7598143E78767'
salt_hex = 'A7193E546377EC56639E'
passwords = ['test','password',''oracle','demo']
for password in passwords:
session_id= decrypt(session_hex.decode('hex'),salt_hex.decode('hex'),password)
print'Decrypted session_id for password "%s" is %s' %(password,session_id.encode('hex'))
ifsession_id[40:] == '\x08\x08\x08\x08\x08\x08\x08\x08':
print'PASSWORD IS "%s"' % password
break
4、建议的预防措施
根据以上两段分析,我们可以有如下的预防措施:
(1)在条件许可的情况下,对Oracle进行补丁升级,对Oracle打cpuoct2012-1515893补丁;注意对于cpuoct2012-1515893补丁要求服务器端和应用服务器端同时升级,否则应用系统将无法访问Oracle;
(2)若无法对Oracle升级,要购买或安装具备虚拟补丁功能的数据库安全产品,防止对CVE-2012-3137和CVE-2012-1675的利用;
(3)建立足够强健的口令,不要使用8位以下密码,或者字典库中的口令。
;
Oracle的数据字典
首先,Oracle的字典表和视图基本上可以分为三个层次。1.1 X$表这一部分表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建。这部分表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许。如果显示授权你会收到如下错误: SQL grant select on x$ksppi to eygle;grant select on x$ksppi to eygle*ERROR at line 1:ORA-02030: can only select from fixed tables/views1.2 GV$和V$视图从Oracle8开始,GV$视图开始被引入,其含义为Global V$.除了一些特例以外,每个V$视图都有一个对应的GV$视图存在。GV$视图的产生是为了满足OPS环境的需要,在OPS环境中,查询GV$视图返回所有实例信息,而每个V$视图基于GV$视图,增加了INST_ID列判断后建立,只包含当前连接实例信息。注意,每个V$视图都包含类似语句:where inst_id = USERENV('Instance')用于限制返回当前实例信息。我们从GV$FIXED_TABLE和V$FIXED_TABLE开始SQL select view_definition from v_$fixed_view_definitionwhere view_name='V$FIXED_TABLE';VIEW_DEFINITION----------------------------------------------------------select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLEwhere inst_id = USERENV('Instance')这里我们看到V$FIXED_TABLE基于GV$FIXED_TABLE创建。SQL select view_definition from v_$fixed_view_definitionwhere view_name='GV$FIXED_TABLE';VIEW_DEFINITION-----------------------------------------------------------select inst_id,kqftanam, kqftaobj, 'TABLE', indx from x$kqftaunion allselect inst_id,kqfvinam, kqfviobj, 'VIEW', 65537 from x$kqfviunion allselect inst_id,kqfdtnam, kqfdtobj, 'TABLE', 65537 from x$kqfdt这样我们找到了GV$FIXED_TABLE视图的创建语句,该视图基于X$表创建。1.3 GV_$,V_$视图和V$,GV$同义词这些视图是通过catalog.ql创建。当catalog.sql运行时:create or replace view v_$fixed_table as select * from v$fixed_table;create or replace public synonym v$fixed_table for v_$fixed_table;create or replace view gv_$fixed_table as select * from gv$fixed_table;create or replace public synonym gv$fixed_table for gv_$fixed_table;我们注意到,第一个视图V_$和GV_$首先被创建,v_$和gv_$两个视图。然后基于V_$视图的同义词被创建。所以,实际上通常我们访问的V$视图,其实是指向V_$视图的同义词。而V_$视图是基于真正的V$视图(这个视图是基于X$表建立的)。而v$fixed_view_definition视图是我们研究Oracle对象关系的一个入口,仔细理解Oracle的数据字典机制,有助于深入了解和学习Oracle数据库知识。1.4 再进一步1.4.1 X$表关于X$表,其创建信息我们也可以从数据字典中一窥究竟。首先我们考察bootstrap$表,该表中记录了数据库启动的基本及驱动信息。 SQL select * from bootstrap$;LINE# OBJ# SQL_TEXT-------------------------------------------------------------------1 -1 8.0.0.0.00 0 CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL 112K NEXT 1024KMINEXTENTS 1 M8 8 CREATE CLUSTER C_FILE#_BLOCK#("TS#" NUMBER,"SEGFILE#" NUMBER,"SEGBLOCK#" NUMBER)9 9 CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE 10INITRANS 2 MAXT14 14 CREATE TABLE SEG$("FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NOTNULL,"TYPE#" NUMBE5 5 CREATE TABLE CLU$("OBJ#" NUMBER NOT NULL,"DATAOBJ#" NUMBER,"TS#"NUMBER NOT NULL6 6 CREATE CLUSTER C_TS#("TS#" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS2 MAXTRANS 2557 7 CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE 10 INITRANS 2 MAXTRANS255 STORAGE (这部分信息,在数据库启动时最先被加载,跟踪数据库的启动过程,我们发现数据库启动的第一个动作就是: create table bootstrap$ ( line# number not null, obj# number not null,sql_text varchar2(4000) not null) storage (initial 50K objno 56 extents(file 1 block 377))这部分代码是写在Oracle应用程序中的,在内存中创建了bootstrap$以后,Oracle就可以从file 1,block 377上读取其他信息,创建重要的数据库对象。从而根据这一部分信息启动数据库,这就实现了数据库的引导,类似于操作系统的初始化。X$表由此建立。这一部分表可以从v$fixed_table中查到: SQL select count(*) from v$fixed_table where name like 'X$%';COUNT(*)----------394共有394个X$对象被记录。1.4.2 GV$和V$视图X$表建立以后,基于X$表的GV$和V$视图得以创建。这部分视图我们也可以通过查询V$FIXED_TABLE得到。 SQL select count(*) from v$fixed_table where name like 'GV$%';COUNT(*)----------259这一部分共259个对象。 SQL select count(*) from v$fixed_table where name like 'V$%';COUNT(*)----------259同样是259个对象。v$fixed_table共记录了394 + 259 + 259 共 912 个对象。我们通过V$PARAMETER视图来追踪一下数据库的架构: SQL select view_definition from v$fixed_view_definition a wherea.VIEW_NAME='V$PARAMETER';VIEW_DEFINITION-------------------------------------------------------------------select NUM , NAME , TYPE , VALUE , ISDEFAULT , ISSES_MODIFIABLE ,ISSYS_MODIFIABLE , ISMODIFIED , ISADJUSTED , DESCRIPTION, UPDATE_COMMENT fromGV$PARAMETER where inst_id = USERENV('Instance')我们看到V$PARAMETER是由GV$PARAMETER创建的。 SQL select view_definition from v$fixed_view_definition a wherea.VIEW_NAME='GV$PARAMETER';VIEW_DEFINITION-------------------------------------------------------------------select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl,ksppstdf, decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'), decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED', 3,'IMMEDIATE','FALSE'), decode(bit and(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'), decode(bitand(ksppstvf,2,2,'TRUE','FALSE'), ksppdesc, ksppstcmnt from x$ksppi x, x$ksppcvy where (x.indx = y.indx) and ((translate(ksppinm,'_','#') notlike '#%') or (ksppstdf = 'FALSE'))在这里我们看到GV$PARAMETER来源于x$ksppi,x$ksppcv两个X$表。 x$ksppi,x$ksppcv 基本上包含所有数据库可调整参数,v$parameter展现的是不包含"_"开头的参数。以"_"开头的参数我们通常称为隐含参数,一般不建议修改,但很多因为功能强大经常使用而广为人知。
Oracle数据库基础知识:SELECT语句
Oracle数据库基础知识:SELECT语句
SELECT语句是指用来查询、添加、 和删除数据库中数据的语句, 和删除数据库中数据的语句 , 它们 是 SELECT 、 INSERT 、 UPDATE 、 DELETE等. 下面是Oracle数据库基础知识——SELECT语句,希望对大家有所帮助!
普通用户连接conn scott/tiger
超级管理员连接 conn “sys/sys as sysdba”
Disconnect 断开连接
把SQL存到文件 save c:\1.txt
Ed c:\1.txt编辑SQL语句
@c:\1.txt运行SQL语句
Desc emp描述EMP结构
Select * from tab 查看该用户下大所有对象
Show user显示当前用户
书写SQL语句的原则
大小写不敏感,但单引和双引内的大小写是敏感的。切记!
关键字不能缩写
可以分行书写,但关键字不能被跨行书写,单引内也不要跨行书写。
一般每个子句是一行
可以排版来增加可读性
字符串用单引
列的别名用双引
SELECT语句
1、 简单的Select语句
Select * from table 不指定查询的字段
Select attr1,attr2 from table指定查询某些字段
Select attr1,attr2 from table where attr1=xxx查询符合条件的指定字段
2、 使用算术表达式 + - / *
表达式的运算是有优先级的,和程序中的一样,先乘除后加减,括号强制优先级.
+ - * /
先乘除,后加减,括号强制优先级
Select ename,12*sal+300 from emp;
Select ename,12*(sal+300) from emp;
3、 连接运算符 ||
4、 使用字段别名 as
别名的'使用原则
1。区分同名列的名称
2。非法的表达式合法化
3。按照你的意愿显示列的名称
4。特殊的别名要双引
5。直接写列的后面
6。使用as增加可读性
5、 空值 is null
Null值不等于0,也不等于空格。
Null值是未赋值的值,不入索引。
NULL是双刃剑,使用好了提高性能,你对它不了解,往往是错误的根源,切记!
查询NULL值
因为null不等于null,所以没有行被选出。未知不等于未知,无穷不等于无穷.
6、去除重复行 distinct
SELECT 语句显示重复的行。用DISTINCT语法来去掉重复的行。
如果我们想去掉重复的行,我们需要distinct关键字。
在ORACLE数据库的10G前版本,该语句需要排序才能去掉重复的行,而在10G中数据库并不需要
排序,而是使用HASH算法来去掉重复的行,由于避免了排序,从而极大的提高了SQL语句的效率,
因为10G的SQL内核改写了。效率更加的高。因为没有排序,所以输出也是无序的。
7、查询结果排序 order by asc(desc)
Where和order by 子句
语法
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[order by column|expression| alias ];
Where 一定要放在FROM 子句的后面。
显示表的部分行和部分列,使用where子句过滤出想要的行
Select deptno,ename from emp Where deptno=10;
Order by 放在最后,用来排序显示结果
不指明都是二进制排序,如果你想按照拼音,部首,笔画,法语等特殊的排序模式,请设定排序的环境
变量,关于国家语言的支持问题我们再DBA体系结构中描述。
默认是升序asc
降序要指定desc
8、比较运算符 > < (!= or <>) between and
? And运算
Select ename,deptno,sal From emp Where deptno=30 and sal>1200;
ENAME DEPTNO SAL
---------- ------ ----------
ALLEN 30 1600
WARD 30 1250
MARTIN 30 1250
BLAKE 30 2850
TURNER 30 1500
两个条件的交集,必须同时满足。
?in操作 not in
含上下界
In操作,穷举,据说穷举不能超过1000个值,我没有去验证。一般我们也不会穷举到1000个值,如
果到1000请改写你的SQL。
Select deptno,ename,sal from emp Where deptno in(10,20);
9、模糊查询 like
% 表示零或多个字符
_ 表示一个字符
对于特殊符号可使用ESCAPE 标识符来查找
Like运算
_ 通配一个,仅匹配一个字符,
% 通配没有或多个字符
10、逻辑运算符 or and not
OR运算
Select ename,deptno,sal From emp Where deptno=30 or sal>1200;
ENAME DEPTNO SAL
---------- ------ ----------
ALLEN 30 1600
WARD 30 1250
JONES 20 2975
MARTIN 30 1250
BLAKE 30 2850
CLARK 10 2450
KING 10 5000
TURNER 30 1500
JAMES 30 950
FORD 20 3000
MILLER 10 1300
两个条件的并集,满足一个就可以。
? not运算
Select ename,deptno,sal From emp Where ename not like 'T%';
ENAME DEPTNO SAL
---------- ------ ----------
SMITH 20 800
ALLEN 30 1600
Oracle数据库基础的内容简介
本书深入浅出地介绍了Oracle9i数据库系统管理与开发的基础知识,包括4篇共16章,内容涉及0racle9i数据库服务器安装与配置、数据库的创建、数据库管理与开发工具的应用、数据库体系结构与存储空间管理、数据库对象及其管理、数据库安全性管理、数据库备份与恢复管理,以及SQL语言、PL/SQL程序设计等。全书理论与实践相结合,包含大量应用实例,强调实际操作技能的培训。为适合教学需要,各章末均配有习题,并配有电子课件。本书面向Oracle数据库的初学者和入门级用户,可以使读者从Oracle知识零起点开始逐渐全面地了解Oracle数据库的基本原理和相关应用开发,为将来深入学习Oracle数据库奠定基础。本书适合作为高等院校计算机相关号业的教材,也适合作为Oracle数据库的初学者,以及初、中级数据库管理与开发人员的培训教材。
OraclePLSQL基础知识及其相关概念
结构化查询语言(Structured Query Language 简称SQL)是用来访问关系型数据库一种通用语言 属于第四代语言( GL) 其执行特点是非过程化 即不用指明执行的具体方法和途径 而是简单地调用相应语句来直接取得结果即可 显然 这种不关注任何实现细节的语言对于开发者来说有着极大的便利 然而 有些复杂的业务流程要求相应的程序来描述 这种情况下 GL就有些无能为力了 Oracle L/SQL的出现正是为了解决这一问题 Oracle PL/SQL是一种过程化语言 属于第三代语言 它与C C++ Java等语言一样关注于处理细节 可以用来实现比较复杂的业务逻辑
一 编程基础知识
程序结构
Oracle PL/SQL程序都是以块(block)为基本单位 整个Oracle PL/SQL块分三部分 声明部分(用declare开头) 执行部分(以 begin开头)和异常处理部分(以exception开头) 其中执行部分是必须的 其他两个部分可选 无论Oracle PL/SQL程序段的代码量有多大 其基本结构就是由这三部分组成
控制结构
Oracle PL/SQL程序段中有三种程序结构 条件结构 循环结构和顺序结构
) 条件结构
与其它语言完全类似 语法结构如下
if condition then
statement
else
statement
end if ;
)循环结构
这一结构与其他语言不太一样 在PL/SQL程序中有三种循环结构
a loop … end loop;
b while condition loop … end loop;
c for variable in low_bound upper_bound loop … end loop;
其中的 … 代表循环体
)顺序结构
实际就是goto的运用 不过从程序控制的角度来看 尽量少用goto可以使得程序结构更加的清晰
变量声明与赋值
Oracle PL/SQL主要用于数据库编程 所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的 大体分为数字型 布尔型 字符型和日期型 这里简单介绍两种常用数据类型 number varchar
)number 用来存储整数和浮点数 范围为1e ~ e 其使用语法为 number[(precision scale)]
其中(precision scale)是可选的 precision表示所有数字的个数 scale表示小数点右边数字的个数
)varchar 用来存储变长的字符串 其使用语法为 varchar [(size)]
其中size为可选 表示该字符串所能存储的最大长度
在Oracle PL/SQL中声明变量与其他语言不太一样 它采用从右往左的方式声明 比如声明一个number类型的变量v_id 那其形式应为 v_id nunmer;
如果给上面的v_id变量赋值 不能用 = 应该用 := 即形式为:v_id := ;
SQL基本命令
PL/SQL使用的数据库操作语言还是基于SQL的 所以熟悉SQL是进行Oracle PL/SQL编程的基础 SQL语言的分类情况大致如下
) 数据定义语言(DDL) Create Drop Grant Revoke …
) 数据操纵语言(DML) Update Insert Delete …
) 数据控制语言(DCL) Commit Rollback Savapoint …
) 其他 Alter System Connect Allocate …
具体的语法结构可以参阅其他关于SQL语言的资料 这里不再赘述
二 过程与函数
Oracle PL/SQL中的过程和函数与其他语言的过程和函数一样 都是为了执行一定的任务而组合在一起的语句 过程无返回值 函数有返回值
其语法结构为
过程 Create or replace procedure procname(参数列表) as PL/SQL语句块
函数 Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块
三 游标
游标的定义为 用游标来指代一个DML SQL操作返回的结果集 即当一个对数据库的查询操作返回一组结果集时 用游标来标注这组结果集 以后通过对游标的操作来获取结果集中的数据信息 这里特别提出游标的概念 是因为它在PL/SQL的编程中非常的重要 定义游标的语法结构如下 cursor cursor_name is SQL语句;
四 其他概念
Oracle PL/SQL中包的概念很重要 主要是对一组功能相近的过程和函数进行封装 类似于面向对象中的名字空间的概念
lishixinzhi/Article/program/Oracle/201311/18883
如何快速的学习oracle
首先,学些ORACLE之前,你最好确认一下,对于数据库的基础知识是否掌握,如果还没有,那么我建议你先学数据库的基础知识,然后再对ORACLE进行重点的学习。
其次,oracle也是数据库的一种,所以,所有的数据库应该有的功能它都有,有了数据库的基础知识后,学习oracle是比较简单的(我是说对于一般的编程人员),特别的,多比较多个不同数据库的异同,这样可以很快的指导他们的用处,而且也方便记忆。
对于,oracle特有的函数、功能等,如果需要ORACLE深入编程,那肯定是要学习的。
还有,君欲善琪七必先利其器,对ORACLE的学习过程中,一定要掌握一两种数据库客户端软件,在开发过程中,如果连客户端软件都不会用,那必然浪费你很多时间去熟悉软件。
Oracle数据库开发基础教程的内容简介
Oracle数据库系统是目前最优秀的大型数据库管理系统之一,适用面广,各种高级语言都能很好地与之合作,在开发C/S或B/S模式的数据库系统时,可以用其构建起性能稳定、安全性很强的后台数据服务器。《Oracle数据库开发基础教程》第1章对Oracle数据库的基本知识和在应用开发过程中常用的一些对象和功能进行了必要的介绍。第2章~第9章,每章介绍了一个实用的数据信息管理系统。实例选用的前台语言包括VisualBasic6.0、PowerBuilder9.0、ASP和JSP,使读者能够从不同的角度了解Oracle数据库应用系统开发的方法和步骤。其中实例包括考勤管理系统、费用收缴管理系统、仓库管理系统、人事管理系统、论坛系统、采购订单管理系统、招聘求职管理系统、供求信息发布系统等,这些系统都是目前IT从业人员比较关注的方向,相信对读者能够起到一定的实践指导作用。