第一篇:linux_occi连接oracle数据库前的配置和程序示例
Linux 下occi编程问题总结: 操作系统linux centOS4.5 数据库
Oracle10g Release 10.2.0.1.0 1)首先在oracle管网下载:
oracle-instantclient-basic-10.2.0.3-1.i386.rpm oracle-instantclient-devel-10.2.0.3-1.i386.rpm 使用root用户进入linux将上面的basic和devel放入在/root/oracle10g_package/oracle_occipk目录下
执行rpm –ivh * 进行安装,安装好的文件被生成到目录下: /usr/lib/oracle/10.2.0.3/client/lib 存放库文件 其中libclntsh.so 是oracle提供给c语言调用的动态库 /usr/include/oracle/10.2.0.3/client 存放occi头文件
2)将/usr/include/oracle/10.2.0.3/client 存放occi头文件copy到/usr/include目录下
先查看
[root@mylinux /]# ldd which /u01/oracle/bin/sysresv which: ldd:./which: No such file or directory /u01/oracle/bin/sysresv:
libclntsh.so.10.1 => /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1(0x00b46000)
libnnz10.so => /usr/lib/oracle/10.2.0.3/client/lib/libnnz10.so(0x0021d000)
libdl.so.2 => /lib/libdl.so.2(0x00111000)
libm.so.6 => /lib/tls/libm.so.6(0x00115000)
libpthread.so.0 => /lib/tls/libpthread.so.0(0x00138000)
libnsl.so.1 => /lib/libnsl.so.1(0x001b6000)
libc.so.6 => /lib/tls/libc.so.6(0x00423000)
/lib/ld-linux.so.2(0x00b2e000)libclntsh.so.10.1 => 是否存在,不存在要在 $ vi etc/ld.so.conf中增加一行/usr/lib/oracle/10.2.0.3/client/lib 然后执行ldconfig命令使etc/ld.so.conf生效.再次使用
$ ldd which /u01/oracle/bin/sysresv 查看
libclntsh.so.10.1 => /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1(0x00b46000)3)编写测试代码:connclient.cpp #include
#include
#include
#include
using namespace oracle::occi;using namespace std;
int main(){ Environment *env;Connection *conn;Statement *stmt;ResultSet *rset;
string struser=“system”;string strpwd=“oracle”;string strconn_string=“ori”;// oracle的SID env = Environment::createEnvironment(Environment::OBJECT);conn = env->createConnection(struser,strpwd,strconn_string);if(NULL!= conn)
cout<<“conn success”< cout<<“conn failed”< string strsql=“select id,name from table1”;stmt=conn->createStatement();stmt->setSQL(strsql);try{ rset=stmt->executeQuery();while(rset->next()){ int id=rset->getInt(1); string strname=rset->getString(2); cout<<“id==”< rset=NULL; cout<<“rset error”< stmt->closeResultSet(rset);conn->terminateStatement(stmt);env->terminateConnection(conn);Environment::terminateEnvironment(env);return 0;} 4)编译程序connclient.cpp 这里g++有几个参数说明下: -o:要生成的目标文件或可执行文件 -I:用#include“file”的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.。对于#include -locci 连接libocci.so文件 使用g++编译时出现错误: g++-o conncl connclient.cpp-I/usr/include-L/usr/lib/oracle/10.2.0.3/client/lib 命令执行后出现 /tmp/cckQbf4h.o(.text+0x24e): In function `main'::undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void*(*)(void*, unsigned int), void*(*)(void*, void*, unsigned int), void(*)(void*, void*))' /tmp/cckQbf4h.o(.text+0x743): In function `main':: undefined reference to`oracle::occi::Environment::terminateEnvironment(oracle::occi::Environment*)' /tmp/cckQbf4h.o(.gcc_except_table+0xa4): undefined reference to `typeinfo for oracle::occi::SQLException' collect2: ld returned 1 exit status 上面是找不到动态函数库,需要命令行参数中增加-lclntsh –locci g++-o conncl connclient.cpp-I/usr/include-L/usr/lib/oracle/10.2.0.3/client/lib-lclntsh –locci 执行语句再次编译,出现 /usr/bin/ld: warning: libstdc++.so.5, needed by /usr/lib/oracle/10.2.0.3/client/lib/libocci.so, may conflict with libstdc++.so.6 OCCI库在linux编译的时候,由于linux版本太高,会提示以上情况,实际上,在大多数linux系统上,还保留有libstdc++5的库。修改命令参数 g++-o conncl connclient.cpp-I/usr/include-L/usr/lib/oracle/10.2.0.3/client/lib-lclntsh-locci /usr/lib/libstdc++.so.5 编译通过。执行程序 ./conncl 中南林业科技大学 实验报告 课程名称: Oracle数据库 专业班级: 姓名: 学号: ****年**月**日 实验一 安装和使用Oracle数据库 【实验目的】 1.掌握Oracle软件安装过程,选择安装组件 2.掌握建立Oracle数据库,配置网络连接 3.掌握Oracle企业管理器的基本操作 4.使用SQL*Plus,登录到实例和数据库 5.掌握命令方式的关闭和启动实例及数据库 【实验内容】 1.查看已安装的Oracle组件 2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。 3.配置监听器,查看是否在服务中有LISTENER,是否能启动。4.配置本地net服务,提示:设置正确的服务器地址和端口号。5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。6.思考题:有几种打开SQL*Plus的方法?分别是什么? 7.用命令关闭实例和数据库,记录命令 8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。 【实验结论】 1.查看已安装的Oracle组件 2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。 3.配置监听器,查看是否在服务中有LISTENER,是否能启动。 4.配置本地net服务,提示:设置正确的服务器地址和端口号。 5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。 6.思考题:有几种打开SQL*Plus的方法?分别是什么?(1)直接打开 sql plus 即窗口方式(2)cmd 命令行方式 (3)WEB 页面中 iSQL*Plus 方式 7.用命令关闭实例和数据库,记录命令 SQL>shutdown immediate 8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。 sql>startup nomount sql>alter database mount;sql>alter database open;sql>startup (1).用SQLplus 命令:show parameters参数名 (2).用select [列名] from 表名 2.初始化文件有几种?默认的保存位置在哪里? 初始化文件有三种:数据文件,日志文件,控制文件; 默认的保存位置E:oracleproduct10.2.0oradataorcl 4.打开OEM,查看三类物理文件信息 三类物理文件:数据文件、控制文件、日志文件 数据文件:.DBF存储表、索引及数据结构信息 日志文件:.LOG记录对数据库的所有修改信息,用于恢复 控制文件:.CTL二进制文件,记录数据库名、文件标识、检查点 5.分别用select命令查询V$parameter动态性能视图,用show命令查看全局数据库名、实例名、是否启动自动归档、标准数据块大小这四个参数的值,记录命令和结果。用select命令查询V$parameter动态性能视图 用show命令查看全局数据库名、实例名 用show命令查看是否启动自动归档、标准数据块大小 6.如何用命令查看数据文件、控制文件的文件名、存储位置和状态信息? (1).查看数据文件的文件名、存储位置和状态信息 (2).查看控制文件的文件名、存储位置和状态信息 0 和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目录,该数据库相关的各个目录等),登录到mydb数据库。 2.用命令方式手工创建数据库testorcl (1)创建批处理文件,建立必需的各级目录,参考第一题MYDB数据库的默认目录。 (4)运行数据库建立脚本,更改相关服务为手动启动方式 (5)运行数据字典等创建脚本 3.在DBCA中删除MYDB数据库。 Enter valuefor 4:runner Specify log path as parameter 5: Enter valuefor 5: D:oracleproduct10.2.0db_2RDBMSlog 二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名 2.设置行宽为160,每页行数为40 3.查询employees表中所有薪水在3000到6000元之间的员工编号、姓、名、受聘日期、工作代号、薪水、经理代号、部门号,按部门号升序排列,同一部门按员工编号降序排列 4.查询每个部门的人数、平均薪水、最高薪水、最低薪水,按部门编号升序排列 5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称 6.在job_history表中查询任职时间超过1年的员工编号,任职历时月份(保留整数),工作代号,部门代号。 7.查询每个部门经理的员工编号、姓名、薪水、部门号。 【实验结论】 一、需要访问HR示例方案中的表,如果机器上没有该示例方案,则运行相关包和相应配置装入HR方案。 1.将hr.rar解压到D:oracleproduct10.2.0db_2demoschema human_resources目录下,然后在SQL*PLUS 中执行 hr_main.sql 二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名 5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称 738 实验五 PL/SQL编程 【实验目的】 1.熟悉PL/SQL的数据类型和书写规则 2.熟悉控制结构和游标的使用 3.编写和运行函数、过程和触发器 【实验内容】 编写脚本文件,调试运行脚本文件,并记录结果。 1.在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息 在DECLARE部分完成: (2)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型(3)编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数(4)定义学生信息记录变量stu_record 在BEGIN…END部分完成: (1)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’ 性别:‘m’ 籍贯:‘黑龙江省哈尔滨市’ 学习成绩:‘Excellent’ 0 (1)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型 set serveroutput on declare type stu_record_type is record (s_no varchar2(8), s_name varchar2(10), s_sex varchar2(2), s_address varchar2(20), s_studyscore varchar2(10), s_activescore varchar2(10));(2)编写本地子过程:学生信息打印过程PrintStuRecord,把中定义的记录类型作为参数 procedure PrintStuRecord as begin dbms_output.put_line('学号:'|| stu_record.s_no);dbms_output.put_line('姓名 :'|| stu_record.s_name);dbms_output.put_line('性别:'|| stu_record.s_sex);dbms_output.put_line('籍贯:'|| stu_record.s_address);dbms_output.put_line('学习成绩:'|| stu_record.s_studyscore);dbms_output.put_line('活动成绩:'|| stu_record.s_activescore);end PrintStuRecord;(3)定义学生信息记录变量stu_record stu_record stu_record_type;在BEGIN…END部分完成: (4)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’ 性别:‘m’ 籍贯:‘黑龙江省哈尔滨市’ 2.建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中 (1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36)Primary key, bookname varchar2(40)not null, authorname varchar2(10)not null, publishtime date, bookprice float) create table bookinfo(bookno varchar2(36)Primary key,4 Selectcount(bookno),count(distinct authorname)from bookinfo;end;/ (4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化 <1>插入 647 实验六 模式对象管理与安全管理 【实验目的】 1.了解模式对象的类型 2.掌握在OEM中操作模式对象的方法 3.掌握命令方式建立表、视图、索引等常见对象的方法 4.熟悉Oracle中权限分类和设置,理解系统提供用户的角色和权限 5.熟练使用建立用户、角色,为用户授权、授予角色的命令 【实验内容】 1.创建一个TESTUSET用户,密码为test,默认表空间为user表空间 2.创建用户后为其授予登录数据库和创建数据库对象的权限 3.用TESTUSER用户登录数据库 4.创建学生信息表(学号,姓名,性别,入学成绩),定义主键和输入数据(至少5条数据),提交添加的数据。并完成下面的题目: (1)再继续添加2条数据,设置一个保存点savepoint,再添加1条数据,执行回退到保存点的回退命令。查看此时表中数据(2)查询入学成绩大于480的学生信息(3)建立男生信息视图 (4)在“成绩”字段上建立B-树索引 5.创建一个表簇,名为empl_dep,容纳empl表和dep表,有公 ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路...今年我们学习了 oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于 oracle数据库的一些知识。 1.ORACLE的特点: 可移植性 ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性 由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。 可联结性 对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。 2.ORACLE的总体结构 (1)ORACLE的文件结构 一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。 数据文件 一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。 日志文件 须有两个或两个以上,用来记录所有数据库的变化,用于数据库的恢复。控制文件 可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件 含有数据库例程起时所需的配置参数。 (2)ORACLE的内存结构 一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。 SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。 PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。 (3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程 用来执行用户应用程序的。 ②服务进程 处理与之相连的一组用户进程的请求。 ③后台进程 ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。 SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON(Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。ARCH(ARCHIVER)进程。每当联机日志文件写满时,该进程将其拷贝到归档存储设备上。另外还包括分布式DB中事务恢复进程RECO和对服务进程与用户进程进行匹配的Dnnn进程等。 3.ORACLE的逻辑结构 构成ORACLE的数据库的逻辑结构包括:(1)表空间 (2)5种类型的段(segment) ①数据段;②索引段;③回滚(rollbock)段;④临时段;⑤自举(bootstrap)段。 段的分配单位叫范围(Extent) 表空间(Tablespace)一个数据库划分成的若干逻辑部分称为表空间。一个数据库可以有一个或多个表空间,初始的表空间命名为SYSTEM,每一个逻辑表空间对应于一个或多个物理文件。DBA使用表空间做以下工作: 控制数据库对象,如表、索引和临时段的空间分配。为数据库用户设置空间配额。 利用个别表空间的在线或离线,控制数据的可用性。后备或恢复数据。 通过分配空间,以改进性能。 在每个数据库中都存在SYSTEM表空间,它在建立数据库时自动建立。在该表空间中,包含数据库的数据字典,其中存储全部数据库对象的名字和位置。SYSTEM表空间总是在线的,像其它表空间一样,可以通过增加新的数据库文件来扩大。一个表空间可包含许多表和索引。但一个表和索引不能跨越表空间,可跨越组成表空间的文件。在DB的打开的情况下,DBA利用ALTER TABLESPACE语句,可以实施表空间的在线或离线。SYSTEM表空间必须在线。表空间离线有下列原因: 一般为了使部分数据库不能使用,而允许正常存取数据库其余部分。执行表空间离线备份。 一个离线的表空间,不能被应用用户读或编辑。 可以增加数据文件扩大已有的表空间,也可增加新的表空间使数据库容量增大,或分配空间给某个应用。使用ALFER TABLESPACE ADD FILE语句将另一个数据文件加入到已存在表空间中。使用CREATE TABLESPACE语句可建立一个新的表空间。段(segment)表空间中的全部数据存储在以段划分的数据库空间中。一个段是分配给数据库用于数据存储的范围的集合。数据可以是表、索引或RDBMS所需要的临时数据。段是表空间的下一个逻辑存储的级别。一个段不能跨越一个表空间,但可跨越表空间内的文件。一个数据库最多需要五种段类型: 数据段 一个包含一个表(或聚集)的全部数据,一个表(或聚集)总有一个单个数据段。 索引段 一个索引段包含对一个表(或聚集)建立的一个索引的全部索引数据。一个表可以有一个、多个或者没有索引段,取决于它所拥有的索引个数。一个聚集必须至少有一个索引段,即在聚集码上建立聚集索引。 回滚段 每个DB有一个或多个回滚段。一个回滚段是DB的一部分,它记录在某一情况下被撤消的动作。回滚段用于事务控制和恢复。 临时段 在处理查询时,ORACLE需要临时工作空间,用于存储语句处理的中间结果,这个区称为临时段。 自举段 自举段在SYSTEM表空间中,在数据库建立时建立。它包括数据字典定义,在数据库打开时装入。 4.用户数据库对象 由用户建立的对象驻留在表空间中,含有真正的数据。数据库对象有表、视图、聚集、索引、伪列和序号生成器。 (1)聚集(Cluster)聚集是存储数据的一种可选择的方法。聚集包括存储在一起的一组表,它们共享公共列并经常一起使用。由于内容相关并且物理地存储在一起,存取时间得到改进,存储空间可以减少。聚集是一种优化措施。 聚集对性能的改进,依赖于数据的分布和SQL操作的内容。特别是使用聚集对连接非常有利。可以明显地提高连接的速度。建立聚集命令的基本格式: SQL>CREATE CLUSTER〈聚集名〉(列定义[,…]);利用聚集建立表命令基本格式: SQL>CREATE TABLE〈新表名〉(列定义[,…]CLUSTER〈聚集名〉(聚集列);在聚集码上必须建立一个聚集索引,对于每一数据块上每个聚集码值有一索引项。这个索引必须在DML语句对聚集表操作前建立。建立索引的语句是:CREATE INDEX索引名ON CLUSTER聚集名;(2)序号生成器 序号(SEQUENCE)生成器为表中的单列或多列生成顺序号。利用序号可自动地生成唯一主码。使用SQL语句定义序号,给出一些信息(如序号名、是升序或降序、每个序号间的间隔和其它信息)。所有序号存储在数据字典表中。 所有序号定义存储在数据字典的SEQUENCE表中。用户可以通过字典视图 USER-SE-QUENCES、ALL-SEQUENCES 和DBA-SEQUENCES查询和存取。建立序号生成器的语句是: CREATE SEQUENCE序号生成器名 其它选项。 一旦序号生成器S被定义。可用S.Currval来引用S序号生成器的当前值。用S.nextval产生下一个新的序号并加以引用。 (3)伪列 伪列的行为像表的一列,但不真正存在于表中,在查询时可引用伪列,但伪列不能插入、删除或修改。 5.数据字典 数据字典ORACLE RDBMS最重要的部分之一。数据字典含有一组系统定义的表,只能读,是关于数据库的引用指南。它可提供以下信息:ORACLE用户的用户名;每个用户被授予的权限和角色;实体的名字和定义;完整性约束 为数据库实体分配的空间;通用的数据库结构;审计信息;触发子程序等的存储。数据字典是以表和视图构成的,像其它数据库数据一样,可用SQL语言查询数据字典。 数据字典在DB建立时建立。每当DB进入操作,数据字典就由ORACLE RDBMS负责修改。数据库建立时有两个默认DBA用户:SYS、SYSTEM。SYS持有基本表中的数据。数据字典包含一组基表和相关的视图,可分为以下几类: 类 描 述 DBA-××× 只有DBA可存取的视图,给出数据库中定义的任何实体的信息 USER-××× 对任何用户可用的视图,给出他们自己的实体的信息 ALL-××× 对任何用户可用的视图,给出用户可存取的所有实体的信息 其中×××代表表名或视图名 下面列出的是一些常用的表或视图的名称。(1)DTAB 描述了组或数据字典的所有表。(2)TAB 用户建的所有基本表、视图和同义词。(3)COL 用户创建基本表的所有列的信息。 (4)SYNONYMS 用户可存取的同义名词、专用名和公用名。(5)CATALOG 用户可存取的表、视图、同义词、序列。(6)CONSTRAINTS 用户可存取的约束。(7)INDEXES 用户可存取的表和聚集的序列。(8)OBJECTS 用户可存取的对象。(9)TABLES 用户可存取的表。(10)USERS 查看当前全部用户。(11)VIEWS 查看用户可存取的视图。 (12)SYSTABAUTH 用户对数据对象的使用权限。可以用SQL>SELECT*FROM〈字典表名或视图名〉WHERE〈条件〉来读取有关信息。 可以用SQL>DESCRIBE〈表名〉来查看表的结构定义。但是数据库字典的结构不可改。用DESCRIBE命令还可以查看视图及过程的定义。 6.ORACLE的SQL、PL/SQL与SQL*PLUS 作为ORACLE数据库核心的SQL语言是ANSI和ISO的标准SQL的扩充。用来存储、检索和维护数据库中的信息,并控制对数据库的存取事务。由于RDBMS执行SQL语句时,是一次只执行一条语句,它是非过程化的。这就使得单条的SQL语句使用方便,功能强大。用户只需说明操作目的,不必关心具体操作的实现方法。 但在实际数据库应用开发中,往往要依据前一步对数据库操作的结果或上一个事务提交的情况来确定下一步的操作。故ORACLE推出了一种PL/SQL工具,它扩充了SQL语句,使之具有可进行过程化编程的能力,如循环、分支功能。PL/SQL可支持变量和常量的使用。例如在SELECT查询语句的where子句中可以使用变量来书写条件表达式。SQL*PLUS是ORACLE用来存储、查询、操纵、控制和报告数据库中信息的一个交互式工具。它是一种集编辑、调试、运行于一体的开发环境。在SQL*PLUS的这种运行环境下,既可以使用SQL命令、PL/SQL语句、及SQL*PLUS自己提供的命令,又可以运行由上述三类命令(或语句)编辑而成的命令文件。SQL*PLUS提供的附加命令主要用来编辑、运行上述三类命令及命令文件和对查询结果进行格式化输出等功能。 7.数据库系统的管理 ORACLE作为一个大型的数据系统,通常包含很多用户的数据。在应用开发过程中,有许许多多的各类人员进行开发和应用。所以必须要求有人对数据库系统进行临时管理,并进行数据的备份等工作。这种人被称为数据库管理员(Data Base Administrator)。他们必须理解数据库系统管理,清楚数据库包含的数据内容、运行状况等。 一般说来,DBA不是指具体的人,而是指对数据库可以行使DBA特权的用户。DBA具有如下责任:(1)ORACLE服务器和客户工作站软件的安装和升级;(2)创建基本的数据库存储结构(表空间);(3)创建基本的数据库客体(表、视图、索引);(4)修改数据库结构;(5)给用户授权,维护系统安全;(6)控制和管理用户对数据库的访问;(7)监视和优化数据库的性能;(8)计算数据库信息的后备和恢复;(9)后备和恢复数据库;(10)构造ORACLE服务器,如创建数据库链、客体同义词等。而应用开发人员须完成:(1)应用程序设计;(2)应用的数据库结构设计和修改;(3)为DBA提供必要的信息;(4)完成应用程序的开发。 看了许多关于ORACLE的知识论坛,总算是对ORACLE有个整体的认识,不仅仅是拘泥于课堂上学习的知识而已,虽然自己对ORACLE学习并不是多么的透彻,但是总归多接触点新的东西总是好的。 这一个学期,也是临近毕业的时候了,很感谢贾老师的严格要求,让我在学习上有了很大的进步,同时也改掉了一些惰性,能积极的投入到学习中去了,不懂就大胆的问同学,请学习好的同学帮助讲解,最后,真心的祝福贾老师工作顺利,身体健康! 创建表及命名规则? 表名和列名: 必须以字母开头 必须在1–30个字符之间 必须只能包含A–Z, a–z, 0–9, _, $, 和# 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保留字 Oracle默认存储是都存为大写 增删改查语法? 增加: 例如:使用INSERT语句往customers表中插入数据,指定相关列和值 INSERT INTO customers(customer_id, first_name, last_name, dob, phone)VALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215'); 如果为表所有列都指定值,那么可以忽略列清单 INSERT INTO customersVALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215'); 可以使用NULL为某些列指定空值 INSERT INTO customersVALUES(8, 'Sophie', 'White', NULL, NULL); 查询:select * fromcustomers;或者select字段 fromcustomerswhere条件 删除:deletefromcustomerswhere条件 更改:update customersset name = 'xiaoming',age = ‘16’(更改多个字段时候用逗号隔开)where 条件 对查询结果进行排序? 语句:select * fromcustomersorderby字段 desc; (asc(升序),desc(降序)如果不写,默认升序) NULL值了解么? NULL值表示未知的值。它是一个特殊的值,但并不是空字符串,NULL值表示该列是未知的。当某些查询语句在输出结果列上看不到值的时候,可能就是NULL值 NVL()和NVL2(): NULL值被查询出来的时候没有显示信息,如何告知用户这是空字符串还是NULL,这可以通过NVL()函数来进行处理 NVL(x,value)是有value显示本身,null显示为替换的value NVL2(x,value1,value2)是如果x不为NULL值,返回value1,否则返回value2 例程: select name,nvl2(email,'已知','未知')from student;【代码含义:代表如果email字段中有值,则显示已知,null则显示未知,如果想显示本来的查询结果select name,nvl(email,'未知')from student;】 update student set name = replace(name,'小','大');【代码含义:代表将STUDENT表中NAME 字段中如果含有小字,那么就将小字替换为大字(操作的不是显示结果,而是将表中数据进行更改)】 Oracle中的简单函数? 字符串函数 concat:将x和y拼接起来,并返回新字符串 例程: select concat(first_name,'-'||last_name)姓名 from customers; Instr字符查找,从1开始。 select instr('asdbcrdbewqrbmde','b')from dual;select instr('asdbcrdbewqrbmde','b',5,2)from dual;【代表从第5个字符开始,第二个b所在的位置】 Ltrim : LTRIM(x,[trim_string])从x字符串左侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除左侧空白字符 Rtrim RTRIM(x,[trim_string])从x字符串右侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除右侧空白字符 Trim TRIM(trim_string FROM x)从x字符串两侧去除trim_string字符串 Replace REPLACE(x, search_string, replace_string)从字符串x中搜索search_string字符串,并使用replace_string字符串替换。用select执行并不会修改数据库中原始值,但是用update执行可以修改。 Substr SUBSTR(x, start,[length])返回字符串中的指定的字符,这些字符从字符串的第start个位置开始,长度为length个字符;如果start是负数,则从x字符串的末尾开始算起;如果length省略,则将返回一直到字符串末尾的所有字符 例程: select substr('abcd月fg',4,2)from dual;(结果:d月)select substr('abcdefg',-2)from dual;(结果:fq) 日期函数 Sysdate 例程: Selectsysdatefromdual; Select to_char(sysdate, 'yyyy-mm-dd-hh-mm-ss')from dual; Add_months(d1,n1) last_day(): 转换函数 To_char TO_CHAR(x,[ format])将x转化为字符串。format为转换的格式,可以为数字格式或日期格式 select to_char(sysdate,'yyyy-mm-dd')from dual;【一般在查询时候使用,使返回的值成为指定格式】 to_date TO_DATE(x,[format])将x字符串转换为日期 insert into student values(seq_stu.nextval,'小明',to_date('1992-2-18','yyyy-mm-dd'),default,'北京',null);【一般在添加使用】 返回所查询的值中最后一个日期数据。 聚合函数 Avg:平均数 Sum:求和 Max:最大值 Min:最小值 Count:返回统计的行数 Round:四舍五入 例程: select round(avg(bid),1)from bug;分组了解么? 有时需要对表中的行进行分组,然后统计每组的信息,可以使用GROUP BY进行分组,然后再对每组进行统计。 (1)可以使用GROUP BY对多个列进行分组 例: SELECT product_id, avg(customer_id)FROM purchases GROUP BY product_id; (2)可以对分组后的行使用聚集函数,聚集函数会统计每组中的值,对于每组分别统计后返回一个值 例: SELECT product_type_id,BY COUNT(ROWID)FROM BY productsGROUP product_type_id;注意: product_type_idORDER a)如果查询中使用了聚集函数,被查询的列未使用聚集函数处理,那么这些列必须出现在GROUP BY子句后,否则,会提示ORA-00937错误 b)不能使用聚集函数作为WHERE子句的筛选条件,否则,会提示ORA-00934错误 c)可以使用HAVING子句过滤分组后的行 SELECT...FROM...WHERE GROUP BY...HAVING...ORDER BY...;(GROUP BY使用时可以不使用HAVING,但是使用HAVING时必须有GROUP BY才有意义) (3)同时使用WHERE, GROUP BY和HAVING a)首先,执行WHERE筛选掉不符合条件的行 b)然后,将符合条件的行使用GROUP BY进行分组 c)最后,使用HAVING对分组统计的结果进行再次筛选 例: SELECT product_type_id, AVG(price)FROM products WHERE price < 15 GROUP BY product_type_id HAVING AVG(price)> 13 ORDER BY product_type_id; 表的约束条件? 目的: 确保表中数据的完整性。 常用的约束类型: 主键约束(PRIMARY KEY):要求主键列数据唯一,并且不允许为空 非空约束(NOT NULL):指定的列的值不允许为空 唯一键约束(UNIQUE):要求该列唯一,允许为空,但只能出现一个空 值 检查约束(CHECK):指定表中一列或多列可以接受的数据值格式 默认约束(DEFAULT):指定某列的默认值 外键约束(FOREIGN KEY):用于建立和加强两个表数据之间连接的一 列或多列。通过将表中的主键列添加到另一个表中。可以创建两个表之间的连接。这个主键的列就称为第二个表的外键。外键约束就可以确保添加到外键表中的任何行都在主表中都存在相应的行 多表查询? 不同的数据存储在不同的表中,通常要查询多张表才能找到需要的数据 例程: SELECT products.name, product_types.name FROM products, product_types WHERE products.product_type_id = product_types.product_type_id AND products.product_id = 3; products表和product_types表相关字段会用在SELECT语句及WHERE子句上,可以给表起别名,提高代码可读性、降低书写难度 例程: SELECT p.name, pt.name FROM products p, product_types pt WHERE p.product_type_id = pt.product_type_id AND p.product_id = 3 注意: 如果查询两张表,并且没有定义连接条件,那么查询的结果集是两表相乘的结果,这样的情况称之为笛卡尔乘积。总结:多表查询WHERE时,连接次数=查询时连接表的数量-1 常见的三种连接类型: 内连接: 内连接返回的行只有满足连接条件才会返回。如果连接条件的列中有NULL值,那么该行则不会返回 外连接: 外连接返回的行满足连接条件,也包括在连接条件的列包含空值的行 自连接: 连接的表为同一张表 子查询? 子查询是嵌入到另一个SELECT语句中的一个SELECT语句。通过使用子查询,可以使用简单的语句组成强大的语句。当需要从表中选择行,而选择条件却取决于该表自身中的数据时,子查询非常有用。 单行子查询:(1)可以将另外一个查询作为WHERE子句的子查询 例:查询尾名是‘Brown’的首名和尾名 SELECT first_name, last_name FROM customers WHERE customer_id = (SELECT customer_id FROM customers WHERE last_name = 'Brown');(2)在单行子查询还可以使用其他比较运算符,如<>、<、>、<=和>= 例:查询价格大于平均价格的商品编号、名称及价格 WHERE子句中使用>,以及子查询中使用AVG()聚集函数 SELECT product_id, name, price FROM products WHERE price >(SELECT AVG(price)FROM products);(3)在HAVING子句中使用子查询 HAVING是在分组统计后用于过滤行,同样在HAVING子句后面可以跟子查询。单行子查询将返回结果用于HAVING子句过滤分组统计的行 例如:查询平均价格小于最大平均值的商品编号及平均值 SELECT product_type_id, AVG(price)FROM products GROUP BY product_type_id HAVING AVG(price)<(SELECT MAX(AVG(price))FROM products GROUP BY product_type_id)ORDER BY product_type_id; 分页查询? 可以通过ROWNUM来实现。 序列? 序列是一个数据库对象,用于生成一系列的整数。 索引? 索引是与表关联的可选结构。可以创建索引以加快对表执行SQL语句的速度。就像书的索引可以帮助我们更快速的查找信息一样,Oracle中的索引也提供了一种更快地访问表数据的途径。 视图? 视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。数据库中只在数据字典中存储对视图的定义。 2014-2015学第一学期ORACLE教学工作总结 班级:13高软班 数据库技术是计算机科学技术中发展最快的领域之一,也是应用最为广泛的技术之一,它已经成为计算机信息系统与应用的核心技术和重要基础。所以在学习这门课时,注重学生实际操作能力,安排了理论与上机操作相结合。以下是我的工作总结: 1、课前准备:备好课。认真学习贯彻教学大纲,钻研教材。了解教材的基本思想、基本概念、结构、重点与难点,掌握知识的逻辑。 了解学生原有的知识技能的质量,他们的兴趣、需要、方法、习惯,学习新知识可能会有哪些困难,采取相应的措施。 考虑教法,解决如何把已掌握的教材传授给学生,包括如何组织教学、如何安排每节课的活动。 2、课堂上的情况。组织好课堂教学,关注全体学生,注意信息反馈,调动学生的注意力,使其保持相对稳定性。同时,激发学生的情感,使他们产生愉悦的心境,创造良好的课堂气氛,课堂语言简洁明了,课堂提问面向全体学生,注意引发学生学习的兴趣,课堂上讲练结合,布置好课外作业,减轻学生的负担。 3、上机操作情况。让学生复习操作上节课的学习内容,布置一定的作业,做到每个学生的每个SQL语句,每个操作抖完全掌握。总之,作为一名教师,教学是我的基本工作,而教与学是一个良性互动的过程,在教中学,在学中教,才能实现自己在业务上的进步与飞跃。实施素质教育对教师的素质要求更高,在今后的教育教学中,我将严格要求自己,努力工作,发扬优点,开拓进取,为教育事业奉献自己的力量。第二篇:Oracle数据库实验报告
第三篇:ORACLE数据库学习心得
第四篇:Oracle数据库总结范文
第五篇:ORACLE数据库工作总结