clob类型(oracle)的数据如何用SQL语句(在sql plus中)插入?如能解决,马上给分

dj12 2002-06-26 02:26:15
clob类型(oracle)的数据如何用SQL语句(在sql plus中)插入?
因为我想写到存储过程里面,不知如何操作?
...全文
1106 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lisam 2002-06-27
  • 打赏
  • 举报
回复
declare
v_lob clob;
v_text varchar2(32767);
begin
......
insert into t_tablename
values(...,empty_clob(),...);
select clob_column into v_lob from......for update;
dbms_lob.write(v_lob,length(v_text),1,v_text);
commit;
end;
这样只能插入32767字节,你自己可以改一下。
dj12 2002-06-27
  • 打赏
  • 举报
回复
问题应该是可以解决了

感谢各位了,尤其是 penitent(只取一瓢)、 lisam(redplane) 、 KingSunSha(弱水三千)

很快会结贴给分
penitent 2002-06-26
  • 打赏
  • 举报
回复
存储过程实现的话可以调用dbms_lob包直接从操作系统中从文件读入,这样就不用写循环了,我看直接存文件最好还是用blob类型。
看一看这个
http://www.greatchinatelecom.com/card/oracle/clob.htm
http://it.sinohome.com/181224/180804.htm
dj12 2002-06-26
  • 打赏
  • 举报
回复
看到没有,我已经将这个问题的分数又加了20分,如有可能我还会再加的,只要能帮我解决问题即可

谢谢各位!
dj12 2002-06-26
  • 打赏
  • 举报
回复
to : lisam(redplane)
我现在是要将一个大文本插入到数据库中,而这个插入的过程我想用存储过程来实现
在数据库中这个大文本的类型为clob

你给出的是怎样读取出来的代码,不管怎样都要谢谢你的,到最后我肯定会给你分的
dj12 2002-06-26
  • 打赏
  • 举报
回复
我的mail:

dingl@nes.com.cn
j2ee@sohu.com
谢谢
lisam 2002-06-26
  • 打赏
  • 举报
回复
varchar2类型虽然有长度限制,但是你可以分段读取CLOB列的数据。
要用到dbms_lob包。用一个循环调用dbms_lob.read。
declare
v_text varchar2(32767);--每次读取的数据
v_lob clob;
amt binary_integer:=32767;--每次读取的字节数
pos integer:=1;--读取位置
begin
select CLOB列 into v_lob where.....;
loop
dbms_lob.read(v_lob,amt,pos,v_text);
pos:=pos+amt;
.........
end loop;
exception when no_data_found then null; --退出循环
end;
xinpingf 2002-06-26
  • 打赏
  • 举报
回复
clob里面存2进制的东西恐怕不行吧,
想存2进制用blob
xinpingf 2002-06-26
  • 打赏
  • 举报
回复
clob里面存2进制的东西恐怕不行吧,
想存2进制用blob
xinpingf 2002-06-26
  • 打赏
  • 举报
回复
clob里面存2进制的东西恐怕不行吧,
想存2进制用blob
SDT 2002-06-26
  • 打赏
  • 举报
回复
to dj12(令少爷) :

你是搂主,本贴的管理,让后给我给分,呵呵,在告诉我你的email,我发给你啊。比较长啊
dj12 2002-06-26
  • 打赏
  • 举报
回复
如何给你专家分?请告之
dj12 2002-06-26
  • 打赏
  • 举报
回复
如何给你专家分?请告之
SDT 2002-06-26
  • 打赏
  • 举报
回复
搞错,是关于bfile,blob的操作示例文档

:)
SDT 2002-06-26
  • 打赏
  • 举报
回复
这儿有我做的关于bile,blob的操作示例文档,oracle8.15调试通过,可以发给需要的同志们。

不过,不好意思啊,我需要点专家分,呵呵。
dj12 2002-06-26
  • 打赏
  • 举报
回复
感谢 KingSunSha(弱水三千)
这个写到存储过程里应该没有问题吧

还有个问题,这个clob值如何传到存储过程里面,varchar2只能是4000,参数如何写?
我先给你20分,OK?
深山老柳 2002-06-26
  • 打赏
  • 举报
回复
这不是和一般的表的操作一样吗?
怎么在CLOB类型的表中在SQL*PL中插入二进制文件?
深山老柳 2002-06-26
  • 打赏
  • 举报
回复
我也想知道。
KingSunSha 2002-06-26
  • 打赏
  • 举报
回复
SQL> create table test_clob
2 (text clob);
Table created.
SQL> insert into test_clob (text)
2 values ('12345678');
1 row created.
SQL> insert into test_clob (text)
2 values ('987654321');
1 row created.
SQL> select * from test_clob;
TEXT
-------------------------------------------------------------------12345678
987654321
br>精通Oracle 10g PL/SQL编程


【作 者】王海亮 林立新 于三禄 郑建茹
【丛 书 名】 万水Oracle技术丛书

http://images.china-pub.com/ebook20001-25000/21975/shupi.jpg

PL/SQLOracle特有的编程语言,它不仅具有过程编程语言的基本特征(循环、条件支等),而且还具有对象编程语言的高级特征(重载、继承等)。 本书是专门为Oracle应用开发人员提供的编程指南。通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了大量Oracle9i和Oracle 10g新增加的PL/SQL特征。 本书不仅适合于PL/SQL初学者,而且也适合于有经验的PL/SQL编程人员,本书还可以作为Oracle培训班的教材或者辅助材料。


前言
第1章 PL/SQL综述
1.1 SQL简介
1.2 PL/SQL简介
1.3 Oracle 10g PL/SQL新特征
第2章 PL/SQL开发工具
2.1 SQL*Plus
2.2 PL/SQL Developer
2.3 Procedure Builder
2.4 习题
第3章 PUSQL基础
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代码编写规则
3.4 习题
第4章 使用SQL语句
4.1 使用基本查询
4.1.1 简单查询语句
4.1.2 使用WHERE子句
4.1.3 使用ORDERBY子句
4.2 使用DML语句
4.2.1 插入数据
4.2.2 更新数据
4.2.3 删除数据
4.3 使用事务控制语句
4.3.1 事务和锁
4.3.2 提交事务
4.3.3 回退事务
4.3.4 只读事务
4.3.5 顺序事务
4.4 数据
4.4.1 组函数
4.4.2 GROUPBY和HAVING
4.4.3 ROLLUP和CUBE
4.4.4 GROUPINGSETS
4.5 连接查询
4.5.1 相等连接
4.5.2 不等连接
4.5.3 自连接
4.5.4 内连接和外连接
4.6 子查询
4.6.1 单行子查询
4.6.2 多行子查询
4.6.3 多列子查询
4.6.4 其他子查询
4.7 合并查询
4.8 其他复杂查询
4.9 习题
第5章 SQL函数
5.1 数字函数
5.2 字符函数
5.3 日期时间函数
5.4 转换函数
5.5 集合函数
5.6 其他单行函数
5.7 组函数
5.8 对象函数
5.9 习题第
6章 访问Oracle
6.1 检索单行数据
6.2 操纵数据
6.2.1 插入数据
6.2.2 更新数据
6.2.3 删除数据
6.2.4 SQL游标
6.3 事务控制语句
6.4 习题
第7章 编写控制结构
7.1 条件支语句
7.2 CASE语句
7.3 循环语句
7.4 顺序控制语句
7.5 习题
第8章 使用复合数据类型
8.1 PL/SQL记录
8.1.1 定义PL/SQL记录
8.1.2 使用PL/SQL记录
8.2 PL/SQL集合
8.2.1 索引表
8.2.2 嵌套表
8.2.3 变长数组(VARRAY)
8.2.4 PL/SQL记录表
8.2.5 多级集合
8.2.6 集合方法
8.2.7 集合赋值
8.2.8 比较集合
8.3 批量绑定
8.3.1 FORALL语句
8.3.2 BULKCOLLECT子句
8.4 习题
第9章 使用游标
9.1 显式游标
9.2 参数游标
9.3 使用游标更新或删除数据
9.4 游标FOR循环
9.5 使用游标变量
9.6 使用CURSOR表达式
9.7 习题
第10章 处理例外
10.1 例外简介
10.2 处理预定义例外
10.3 处理非预定义例外
10.4 处理自定义例外
10.5 使用例外函数
10.6 PL/SQL编译警告
10.7 习题
第11章 开发子程序
11.1 开发过程
11.2 开发函数
11.3 管理子程序
11.4 习题
第12章 开发包
12.1 建立包
12.2 使用包重载
12.3 使用包构造过程
12.4 使用纯度级别
12.5 习题
第13章 开发触发器
13.1 触发器简介
13.2 建立DML触发器
13.2.1 语句触发器
13.2.2 行触发器
13.2.3 使用DML触发器
13.3 建立INSTEADOF触发器
13.4 建立系统事件触发器
13.5 管理触发器
13.6 习题
第14章 开发动态SQL
14. 1 动态SQL简介
14.2 处理非查询语句
14.3 处理多行查询语句
14.4 在动态SQL使用BULK子句
14.5 习题第15章 使用对象类型
15.1 对象类型简介
15.2 建立和使用简单对象类型
15.3 建立和使用复杂对象类型
15.3.1 对象类型嵌套
15.3.2 参照对象类型
15.3.3 对象类型继承
15.4 维护对象类型
15.5 习题
第16章 使用LOB对象
16.1 LOB简介
16.2 DBMS LOB包
16.3 访问LOB
16.3.1 访问CLOB
16.3.2 访问BLOB
16.3.3 访问BFILE
16.4 习题
第17章 使用Oracle系统包
17.1 DBMS_OUTPUT
17.2 DBMS JOB
17.3 DBMS PIPE
17.4 DBMSAIERT
17.5 DBMS TRANSACTION
17.6 DBMS SESSION
17.7 DBMS ROWID
17.8 DBMSRLS
17.9 DBMS DDL
17.10 DBMS SHARED POOL
17.11 DBMSRANDOM
17.12 DBMS LOGMNR
17.13 DBMS FLASHBACK
17.14 DBMS OBFUSCATION TOOLKIT
17.15 DBMS SPACE
17.16 DBMS SPACE ADMIN
17.17 DBMSTTS
17.18 DBMSREPAIR
17.19 DBMSRESOURCE MANAGER
17.20 DBMS STATS
17.21 UTL FIIE
17.22 UTL INADDR
附录A 习题参考答案
附录B 使用SQL*Plus

http://www.china-pub.com/21975
本课程详细讲解了以下内容:    1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程    2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例    3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题     4.session与cookie问题及application、cookie补充说明及四种范围对象作用域     5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别     6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据     7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)     8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码析     9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)    1 0.Web调试及bug修复、SQLOracle、MySQLSQLSERVER)     11.页业务逻辑层和数据访问层Service、Dao、页表示层Jsp、Servlet     12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题     13.EL表达式语法、点操作符和括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove     14.过滤器、过滤器通配符、过滤器链、监听器     15.session绑定解绑、钝化活化     16.以及Ajax的各种应用     17. Idea环境下的Java Web开发
第一部 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24 §1.2.2 数据字典概念 25 §1.3 SQLSQL*Plus及 PL/SQL 25 §1.3.1 SQLSQL*PLUS的差别 25 §1.3.2 PL/SQL语言 27 §1.4 登录到SQL*PLUS 27 §1.4.1 UNIX环境 27 §1.4.2 Windows NT和WINDOWS/2000环境 29 §1.5 常用SQL*PLUS 附加命令简介 32 §1.5.1 登录到SQL*PLUS 32 §1.5.2 EXIT和QUIT 32 §1.5.3 DESCRIBE(显示表、视图结构) 33 §1.5.4 LIST(列出)命令 33 §1.5.5 Change(替换字符串)命令 34 §1.5.6 Append(追加字符串)命令 34 §1.5.7 Save保存当前缓冲区命令到文件 35 §1.5.8 GET将命令文件读到缓冲区 35 §1.5.9 SPOOL将信息记录到文件 36 §1.5.10 再运行当前缓冲区的命令 36 §1.6 常用数据字典简介 37 §1.7 ORACLE数据类型 38 §1.8 SQL 语句基础 44 §1.8.1 SQL语句所用符号 44 §1.8.2 简单select 查询 45 §1.9 伪列及伪表 46 §1.10 使用SQL Worksheet工作 46 第二章 查询基础 50 §2.1 SELECT语句 50 §2.2 SQL的单记录函数 50 §2.2.1 单记录字符函数 50 §2.2.2 单记录数字函数 56 §2.2.3 单记录日期函数 62 §2.2.4 单记录转换函数 65 §2.2.5 其它的单记录函数 68 §2.3 SQL的组函数 73 §2.3.1 多记录组函数 73 §2.3.2 带 GROUP BY 的计算 75 §2.3.3 用 HAVING 来限制组的计算 75 §2.4 控制和格式化输出 76 §2.4.1 用 ORDER BY 子句来对结果进行排序 76 §2.4.2 用 BREAK 命令 来对结果进行排列 76 §2.4.3 用 COMPUTE 命令对结果进行格式化 79 §2.5 配置会话环境 82 §2.5.1 ARRAYSIZE(取回的行数) 82 §2.5.2 AUTOCOMMIT(自动提交) 83 §2.5.3 LINESIZE(行显示宽度) 83 §2.5.4 LONG(长类型显示字节数) 83 §2.5.5 PAGESIZE(页行数) 83 §2.5.6 PAUSE(暂停) 84 §2.5.7 SPACE(列间空格) 84 §2.5.8 Termout (启/停屏幕显示) 84 §2.5.9 ECHO (启/停命令显示) 84 §2.5.10 TRANSACTION (启动事务) 85 §2.5.11 SHOW ALL(列出所有参数) 85 §2.6 格式化输出 87 §2.6.1 一般数据的格式化输出 87 §2.6.2 日期的格式化输出 88 §2.7 加标题 89 §2.8 建立简单报告 90 §2.9 输入变量 91 第三章 表及索引的定义操作 94 §3.1 建立表结构 94 §3.1.1 建立表结构命令 94 §3.1.2 建立表结构例子 96 §3.1.3 建立临时表结构 97 §3.3 修改表结构 98 §3.3.1 修改表结构命令 98 §3.3.2 修改表结构例子 99 §3.3.3 删除表结构 101 §3.3.4 使用CHECK作限制约束 101 §3.3.5 使用UNRECOVERABLE创建表 102 §3.3.6 将表移动到新的数据段或新的表空间 102 §3.3.7 手工配表的存储空间 104 §3.3.8 标记不使用的列和删除不使用的列 104 §3.3 主键 106 §3.3.1 创建主键 106 §3.3.2 改变主键 109 §3.3.3 删除主键 109 §3.4 外部键 110 §3.4.1 建立外部键 110 §3.4.2 修改外部键 112 §3.4.3 删除外部键 112 §3.5 索引 112 §3.5.1 建立索引 112 §3.5.2 修改索引 114 §3.5.3 删除索引 115 §3.6 新索引类型 115 §3.6.1 基于函数的索引 115 §3.6.2 反向键索引 117 §3.6.3 索引组织表 117 §3.7 抽象数据类型的使用 118 §3.8 大数据类型的使用 119 §3.8.1 可用数据类型 119 §3.8.2 为LOB数据类型指定存储 120 §3.8.3 操作和检索LOB数据 121 §3.9 表和索引有关的数据字典 124 §3.9.1 表和索引数据字典 124 §3.9.2 数据字典查询例子 125 第四章 视图、同义词和序列 128 §4.1 视图 128 §4.1.1 使用视图来修改表数据 128 §4.1.2 创建一个新视图 128 §4.1.3 删除一个视图 130 §4.1.4 改变视图 131 §4.2 实体视图(MATERIALIZED VIEW) 131 §4.2.1 创建实体视图 131 §4.2.2 创建实体视图日志 137 §4.2.3 修改实体视图 139 §4.2.4 修改实体视图日志 141 §4.2.45 实体视图完整例子 142 §4.3 序号(sequence) 146 §4.3.1 建立序号 146 §4.3.2 修改序号 147 §4.3.3 使用序号 147 §4.3.4 删除序号 147 §4.4 同义词 148 §4.4.1 建立同义词 148 §4.4.2 删除同义词 149 §4.5 视图、同义词和序列有关的数据字典 149 第五章 簇与区 150 §5.1 簇( cluster ) 150 §5.1.0 簇概念 150 §5.1.1 建立簇 152 §5.1.2 改变簇 155 §5.1.3 删除簇 155 §5.1.4 删除簇索引 156 §5.1.5 收集簇信息 156 §5.2 区 158 §5.2.1 区的优点 158 §5.2.2 区的方法 159 §5.2.3 创建表的区 159 §5.2.3 创建索引的区 164 §5.2.4 维护表区和索引区 167 §5.3 簇与区有关的数据字典 169 §5.3.1 区、簇数据字典列表 169 §5.3.2 基本的区、簇信息查询 169 第六章 使用SQL 进行数据操作 170 §6.1 INSERT操作 170 §6.1.1 用文字插入操作 171 §6.1.2 用子查询插入操作 171 §6.2 UPDATE操作 172 §6.2.1 用文字更新操作 173 §6.2.2 用查询更新操作 173 §6.2.3 用相关子查询更新操作 174 §6.3 DETELE操作 174 §6.3.1 用delete删除全部记录的操作 174 §6.3.2 用delete有条件删除部记录 175 §6.3.3 用delete段删除大量记录 175 §6.4 insert、delete及update 的提交和撤消 176 §6.4.1 自动提交的设置 176 §6.4.2 保留点和撤消 177 第七章 复杂查询语句的使用 180 §7.1 复杂查询语句的使用 180 §7.1.1 相关子查询 180 §7.1.2 外连接 180 §7.1.3 自我连接 181 §7.1.4 UNION,INTERSECT及MINUS 182 §7.2 创建复杂的视图 183 §7.2.1 组视图 183 §7.2.2 合计视图 183 §7.2.3 组合视图 184 §7.3 家族树 184 §7.3.1 排除单一体和枝 184 §7.3.2 遍历至根 185 §7.4 在from 使用视图 187 第八章 一些高级的用法 188 §8.1 关于DECODE 188 §8.1.1 DECODE 的if-then-else逻辑 188 §8.1.2 DECODE 的简单例子 188 §8.1.3 DECODE实现表的转置 189 §8.2 关于访问远程数据库 192 §8.2.1 数据库链接 192 §8.2.2 使用同义词获得本地透明 193 §8.2.3 在视图使用user伪列 194 §8.2.4 使用COPY功能 195 §8.2.5 管理Oracle名称服务器 196 §8.3 关于上下文的使用 196 §8.3.1 设置上下文选项 196 §8.3.2 为上下文查询设置表 197 §8.3.3 优化文本索引 199 §8.4 关于维数(DIMENSION) 199 §8.4.1 CREATE DIMENSION语法 200 §8.4.2 创建维的例子 201 第九章 安全管理 203 §9.1 CREATE USER 命令 203 §9.2 建立用户 204 §9.2.1 外部验证(Authenticated )用户 204 §9.2.2 全局(Globally)验证用户-企业验证 204 §9.3 ALTER USER 命令 205 §9.4 DROP USER 命令 205 §9.5 GRANT 命令与REVOKE 命令 206 §9.5.1 GRANT 命令 206 §9.5.2 REVOKE 命令 206 §9.6 权限和角色 207 §9.6.1 建立角色 207 §9.6.2 给角色授权 208 §9.6.3 授权角色给用户 209 §9.7 有关的数据字典 209 §9.7.1 与用户、角色与权限有关的数据字典 209 §9.7.2 查询数据字典信息 209 第十章 其它一些常见问题及技巧 212 §10.1 一些常见问题 212 §10.1.1 Oracle与2000年问题 212 §10.1.2 如何正确插入日期数据 213 §10.1.3 在查询只返回满足条件的部记录 214 §10.1.4 快速大量删除数据Truncate 215 §10.1.5 Rowid的使用 215 §10.1.6 在查询不让记录被更新 217 §10.1.7 EXCEPTIONS(违反完整性)问题 217 §10.1.8 Not in和Not Exists 218 §10.1.9 关于 COPY命令 218 §10.1.10 列值为NULL情形的处理 219 §10.1.11 使用 product_user_file来限制用户使用产品 220 §10.2 常用技巧 221 §10.2.1 long 类型的查询 222 §10.2.2 如何确定执行时间 222 §10.2.3 如何终止用户会话 222 §10.2.4 用TRANSLATE对数据加密和解密 224 §10.2.5 如何用查询来修改数据 225 §10.2.6 如何产生创建用户的脚本 226 §10.2.7 如何产生创建表结构的脚本 227 §10.2.8 如何产生创建视图的脚本 229 §10.2.9 如何产生创建序号的脚本 229 §10.2.10 如何为用户创建公共同义词 229 第二部 Oracle PL/SQL基础 231 第十一章 PL/SQL 程序设计简介 231 §11.1 概述 231 §11.2 SQL与PL/SQL 231 §11.2.1 什么是PL/SQL? 231 §11.2.1 PL/SQL的好处 232 §11.2.1.1 有利于客户/服务器环境应用的运行 232 §11.2.1.2 适合于客户环境 232 §11.2.1.3 客户及服务器端的好处 232 §11.2.2 PL/SQL 可用的SQL语句 233 §11.3 运行PL/SQL程序 233 §11.4 PL/SQL内置包 234 第十二章PL/SQL 块结构和组成元素 235 §12.1 PL/SQL结构 235 §12.2 PL/SQL块 236 §12.3 标识符 236 §12.4 PL/SQL 变量类型 237 §12.4.1 变量类型 237 §12.4.2 复合类型(记录和表) 238 §12.4.3 使用%ROWTYPE 240 §12.4.4 LOB类型 240 §12.4.5 用户定义的子类型 241 §12.4.6 数据类型的转换 243 §12.5 运算符和表达式(数据定义) 243 §12.5.1 关系运算符 243 §12.5.2 一般运算符 244 §12.5.3 逻辑运算符 244 §12.6 变量赋值 245 §12.6.1 字符及数字运算特点 245 §12.6.2 Boolean 赋值 245 §12.6.3 数据库赋值 245 §12.6.4 可转换的类型赋值 246 §12.7 变量作用范围以可见性 248 §12.8 注释 248 §12.9 简单例子 249 §12.9.1 简单数据插入例子 249 §12.9.2 简单数据删除例子 249 第十三章PL/SQL 处理流程 250 §13.1 条件语句 250 §13.2 循环 251 §13.3 标号和GOTO 254 §13.4 NULL 语句 255 第十四章 光标的使用 255 §14.1 光标概念 255 §14.1.1 处理显式光标 255 §14.1.2 处理隐式光标 257 §14.2 光标循环 258 §14.2.1 简单循环 258 §14.2.2 WHILE循环 259 §14.2.3 光标 FOR 循环 260 §14.2.4 关于NO_DATA_FOUND和%NOTFOUND 260 §14.2.5 SELECT FOR UPDATE 光标 261 §14.3 光标变量 262 §14.3.1 声明光标变量 262 §14.3.2 为光标变量配存储空间 262 §14.3.3 打开光标变量 262 §14.3.4 关闭光标变量 262 §14.3.5 光标变量例子 263 §14.3.6 光标变量 265 第十五章 错误处理 267 §15.1 异常处理概念 267 §15.1.1 预定义的异常处理 267 §15.1.2 触发异常情态 268 §15.1.3 处理异常情态 269 §15.1.4 用户定义的异常处理 270 §15.2 异常情态传播 271 §15.2.1 在执行部引发异常情态 271 §15.2.2 在声明部引发异常情态 272 §15.3 异常处理编程 273 §15.4 在 PL/SQL 使用 sqlcode,sqlerrm 273 第十六章 存储过程和函数 276 §16.1 引言 276 §16.2 存储过程 276 §16.2.1 创建过程 276 §16.2.2 使用过程 278 §16.2.3 开发存储过程步骤 279 §16.2.3.1 编辑存储过程源码 279 §16.2.3.2 对存储过程程序进行解释 279 §16.2.3.3 调试源码直到正确 279 §16.2.3.4 授权执行权给相关的用户或角色 279 §16.2.4 与存储过程相关数据字典 280 §16.3 创建函数 281 §16.4 过程和函数的例外处理 282 §16.4.1 使用系统定义的例外处理 282 §16.4.1.1 没有例外处理的缺点 283 §16.4.1.2 使用预定义的例外处理 283 §16.4.2 使用用户定义的例外处理+ 286 §16.4.2.1 定义的用户例外处理 286 §16.4.2.2 使用户EXCEPTION_INIT处理 286 §16.4.2.3 使用户raise_application_error处理 286 第十七章 创建包和使用包 287 §17.1 引言 287 §17.2 包的定义 288 §17.3 包的开发步骤 289 §17.4 包的头部说明 289 §17.5 包体的说明 290 §17.6 删除过程、函数和包 293 §17.7 包的管理 293 §17.7.1 包有关的数据字典 293 §17.7.2 包无效对象的查询和编译 294 §17.7.3 包源代码的导出 296 第十八章 触发器 297 §18.1 触发器类型 297 §18.1.1 DML触发器 297 §18.1.2 替代触发器 298 §18.1.3 系统触发器 298 §18.2 创建触发器 298 §18.2.1 创建DML触发器 299 §18.2.2 创建替代(Instead_of)触发器 300 §18.2.3 创建系统触发器 300 §18.2.4 触发器触发次序 302 §18.2.5 使用触发器谓词 302 §18.3 删除和使能触发器 303 §18.4 创建触发器的限制 304 §18.5 变异表 305 §18.5.1 变异表典型例子 307 §18.5.2 变异表错误的处理 308 §18.6 触发器数据字典与管理 309 §18.6.1 触发器数据字典 309 §18.6.2 无效触发器的编译 310 第十九章 外部存储过程 311 §19.1 什么是外部例程 311 §19.2 C外部例程 311 §19.2.1 调用步骤 312 §19.2.2 参数映射( 转换) 317 第二十章 会话间通信 319 §20.1 DBMS_PIPE 319 §20.1.1 发送消息 319 §20.1.2 接收消息 320 §20.1.3 示例 321 §20.2 DBMS_ALERT 340 §20.2.1 使用警告 341 §20.2.2 警告所用的各个过程 341 §20.2.3 警告例子 342 §20.3 DBMS_PIPE 和 DBMS_ALERT 343 第二十一章 数据库作业和文件I/O 344 §21.1 数据库作业 344 §21.1.1后台进程 344 §21.1.2运行作业 344 §21.1.3失效作业 346 §21.1.4删除作业 347 §21.1.5修改作业参数 348 §21.1.6与作业参数有关数据字典 350 §21.2 文件I/O 350 §21.2.1 安全性 351 §21.2.2 打开和关闭文件 351 §21.2.3文件输出 353 §21.2.3文件输入 354 §21.2.4文件操作例子 354 第二十二章 在PL/SQL 使用SQL语句 355 §22.1在PL/SQL 使用DML语句 355 §22.2 伪列 357 §22.3 GRANT、REVOKE 和权限 358 §22.3.1 对象和系统权限 358 §22.3.2 GRANT和REVOKE命令语法 358 §22.4 事务控制 359 §22.4.1 COMMIT 和 ROLLBACK 359 §22.4.2 保留点 SAVEPOINT 360 §22.5 在PL/SQL使用SQL函数 361 §22.5.1 错误处理函数 362 §22.5.2 数字函数 362 第二十三章 PL/SQL程序的测试和调试 363 §23.1 问题诊断 363 §23.1.1 调试指南 363 §23.1.2 显示在编译产生的错误 363 §23.2 插入测试表 364 §23.3 DBMS_OUTPUT的使用 364 §23.4 PL/SQL调试器 365 §23.4.1 Procedure Builder调试器 365 §23.4.2 SQL-Station调试器 366 §23.5 程序设计方法 366 §23.5.1 模块化程序设计 366 §23.5.2 自顶向下设计 366 §23.5.3 数据抽象 366 第二十四章 性能及其它问题 367 §24.1共享池 367 §24.1.1 共享池工作原理 367 §24.1.2 估计共享池大小 368 §24.1.3 将PL/SQL 驻留在共享池 369 §24.2 SQL 语句调整 370 §24.3 网络问题 373 §24.4 PL/SQL wrap(转换器) 373 §24.4.1 运行 wrap实用程序 373 §24.4.2 输入和输出文件 374 §24.5 DBMS_OUTPUT的使用 374 第二十五章 对象类型 376 §25.1 对象类型定义 376 §25.1.1 定义对象类型头 376 §25.1.2 定义对象类型体 376 §25.1.3 定义对象类型例子 377 §25.1.4 初始化对象类型 378 §25.1.5 使用对象类型 379 §25.2 对象类型修改 381 §25.3 对象类型删除 381 第二十六章 动态PL/SQL简介 383 §26.1 概述 383 §26.1.1 静态SQL和动态SQL 383 §26.1.2 用DBMS_SQL 包实现动态 383 §26.1.3 用本地动态SQL实现动态 385 §26.2 使用DBMS_SQL进行动态编程 385 §26.2.1 执行DML、DDL及Alter session语句 385 §26.2.2 示例 388 §26.2.3 执行DDL 语句 389 §26.2.4 执行PL/SQL 块 390 §26.4 本地动态SQL 391 §26.4.1使用EXECUTE IMMEDIATE语句 391 §26.4.2向后兼容情况 392 §26.4.3指定参数模式 393 第二十七章 LOB和DBMS_LOB包简介 394 §27.1 LOB类型一般使用 394 §27.1.1 LOB类型存储 395 §27.1.2 临时LOB类型 395 §27.1.3 LOB类型的接口 396 §27.2 一般LOB表与数据加载 396 §27.2.1 建立包含LOB的表 396 §27.2.2 用EMPTY_CLOB或EMPTY_BLOB插入LOB 398 §27.2.3 一般的LOB插入 399 §27.3 内部LOB和DBMS_LOB的使用 399 §27.3.1 APPEND过程 400 §27.3.2 CLOSE过程 401 §27.3.3 COMPARE函数 401 §27.3.4 COPY过程 403 §27.3.5 ERASE过程 405 §27.3.6 GETCHUNKSIZE函数 406 §27.3.7 GETLENGTH函数 407 §27.3.8 INSTR函数 408 §27.3.9 READ过程 409 §27.3.10 SUBSTR函数 410 §27.3.11 WRITE过程 411 §27.3.12 WRITEAPPEND过程 412 §27.4临时LOB 413 §27.4.1 建立临时LOB 413 §27.4.2 查看临时LOB 414 §27.4.3 释放临时LOB 414 §27.4.4 从BFILE加载临时LOB 415 §27.4.5 查看临时LOB是否打开 415 §27.4.6 显示临时LOB数据 416 §27.4.7 从临时LOB读数据 417 §27.4.8 从临时LOB读部数据 418 §27.4.9 比较两个临时LOB数据 419 §27.4.10 查看临时LOB模式的存在 420 §27.4.11 得到临时LOB的长度 421 §27.4.12 拷贝部临时LOB数据 421 §27.4.13 为临时LOB拷贝位置 422 §27.4.14 加临时LOB到另外的LOB 423 §27.4.15 写追加到临时LOB 424 §27.4.16 写数据到临时LOB 424 §27.4.17 修理临时LOB数据 425 §27.4.18 删除临时LOB数据 426 §27.5外部LOB (BFILE) 426 §27.5.1 BFILE目录指定 426 §27.5.2 建立包括BFILE列的表 427 §27.5.3 用BFILENAME()插入数据 428 §27.5.4 从另外表选择BFILE插入数据 429 §27.5.5 用初始化BFILE位置来插入数据BFILE行 429 §27.5.6 动态加载数据BFILE的表 429 §27.5.7 用BFILE数据来加载LOB数据 430 §27.5.8 用FILEOPEN打开BFILE 431 §27.5.9 用OPEN打开BFILE 431 §27.5.10 用FILEISOPEN看BFILE是否打开 431 §27.5.11 用ISOPEN看BFILE是否打开 432 §27.5.12 显示BFILE 432 §27.5.13 从BFILE数据 433 §27.5.14 读部BFILE 433 §27.5.15 比较BFILE 434 §27.5.16 判断BFILE是否存在模式 434 §27.5.17 判断BFILE是否存在 435 §27.5.18 得到BFILE长度 435 §27.5.19 拷贝BFILE的LOB位置 436 §27.5.20 得到目录别名和文件名字 436 §27.5.21 用初始化BFILE位置更新BFILE 437 §27.5.22 用FILECLOSE关闭BFILE 437 §27.5.23 用CLOSE关闭BFILE 437 §27.5.24 用CLOSEALL关闭所有BFILE 438 §27.5.25 用DELETE等删除BFILE数据 438 §27.6 使用SQL*loader加载LOB 438 §27.6.1 加载图象和文本文件 438 §27.6.2 加载文本文件 439 第二十八章 PL/SQL编程技巧 442 §28.1用触发器实现日期格式的自动设置 442 §28.2如何避免TOO_MANY_ROWS错误 443 §28.3如何解决TOO_MANY_ROWS问题 446 §28.4如何在PL/SQL使用数组 447 §28.5如何使用触发器完成数据复制 448 §28.6在PL/SQL实现Truncate 449 §28.7如何导出存储过程、触发器的代码 450 附录A:SQLSQL*PLUS 命令参考 459 %FOUND 460 %ISOPEN 460 %NOTFOUND 461 %ROWCOUNT 462 %ROWTYPE 463 %TYPE 463 (+) 464 @ (“at” 号) 464 @@ 465 ABS 465 ACCEPT 466 ACOS 466 ADD_MONTHS 467 ALTER CLUSTER 467 ALTER DATABASE 468 ALTER FUNCTION 469 ALTER INDEX 469 ALTER PACKAGE 470 ALTER PROCEDURE 470 ALTER PROFILE 471 ALTER RESOURCE COST 471 ALTER ROLE 472 ALTER ROLLBACK SEGMENT 472 ALTER SEQUENCE 473 ALTER SESSION 473 ALTER SNAPSHOT 474 ALTER SNAPSHOT LOG 475 ALTER SYSTEM 475 ALTER TABLE 476 ALTER TABLESPACE 477 ALTER TRIGGER 478 ALTER TYPE 478 ALTER USER 479 ALTER VIEW 480 ANALYZE 480 APPEND 481 ASCII 481 ASIN 482 ATAN 482 ATAN2 483 AUDIT 483 AVG 484 BFILENAME 484 BLOCK 485 BTITLE 486 CEIL 487 CHANGE 488 CHARTOROWID 488 CHR 489 CLEAR 489 CLOSE 490 COLUMN 490 COMMENT 491 COMMIT 492 COMPUTE 492 CONCAT 493 CONCATENATE 493 CONNECT BY 494 CONVERT 494 COPY 495 COS 496 COSH 496 COUNT 497 CREATE CLUSTER 497 CREATE CONTROLFILE 498 CREATE DATABASE 499 CREATE DATABASE LINK 500 CREATE PROFILE 500 CREATE DIRECTORY 501 CREATE FUNCTION 501 CREATE INDEX 502 CREATE LIBRARY 503 CREATE PACKAGE 503 CREATE PACKAGE BODY 504 CREATE PROCEDURE 506 CREATE ROLE 507 CREATE ROLLBACK SEGMENT 507 CREATE SCHEMA 508 CREATE SEQUENCE 509 CREATE SNAPSHOT 509 CREATE SNAPSHOT LOG 510 CREATE SYNONYM 511 CREATE TABLE 511 CREATE TABLESPACE 513 CREATE TRIGGER 514 CREATE TYPE 515 CREATE TYPE BODY 516 CREATE USER 516 CREATE VIEW 517 CURRVAL 518 CURSOR_ALREADY_OPEN 518 DATATYPE 519 DATATYPE —CHAR 519 DATATYPE —DATE 520 DATATYPE —FLOAT 520 DATATYPE —LONG 520 DATATYPE —LONGRAW 521 DATATYPE —MLSLABEL 521 DATATYPE —NUMBER 521 DATATYPE —RAW 522 DATATYPE —ROWID 522 DATATYPE —VARCHAR 522 DATATYPE —VARCHAR2 522 DECLARE 523 DECODE 523 DEFINE 524 DEL 524 DELETE 525 DEREF 526 DESCRIBE 526 DROP CLUSTER 527 DROP DATABASE LINK 527 DROP DIRECTORY 528 DROP FUNCTION 528 DROP INDEX 528 DROP LIBRARY 529 DROP PACKAGE 529 DROP PROCEDURE 530 DROP PROFILE 530 DROP ROLE 531 DROP ROLLBACK SEGMENT 531 DROP SEQUENCE 532 DROP SNAPSHOT 532 DROP SNAPSHOT LOG 532 DROP SYNONYM 533 DROP TABLE 533 DROP TABLESPACE 534 DROP TRIGGER 534 DROP TYPE 535 DROP TYPE BODY 535 DROP USER 536 DROP VIEW 536 DUMP 537 DUP_VAL_ON_INDEX 537 EDIT 538 EMPTY_BLOB 538 EMPTY_CLOB 539 EXCEPTION INIT Pragma 539 EXECUTE 540 EXISTS 540 EXIT 541 EXIT 542 EXIT-WHEN 542 EXP 543 EXPLAIN PLAN 543 FETCH 544 FLOOR 545 FOR-LOOP 545 FORMAT 546 FORMAT —DATE 546 FORMAT —NUMBER 547 GET 547 GLB 548 GOTO 548 GRANT 549 GREATEST 550 GREATEST_LB 550 HEXTORAW 551 HOST 551 IF-THEN 552 IF-THEN-ELSE 552 IF-THEN-ELSEIF 553 INITCAP 554 INPUT 554 INSERT 555 INSTR 555 INSTRB 556 INTERSECT 557 INVALID_CURSOR 557 INVALID_NUMBER 558 KEYWORDS 559 LABELS 560 LAST_DAY 561 LEAST 561 LEAST_LB 562 LENGTH 562 LENGTHB 562 LIKE 563 LIST 564 LN 565 LOCK TABLE 565 LOG 566 LOGIN_DENIED 566 LOOP 567 LOWER 568 LPAD 568 LTRIM 569 LUB 569 MAKE_REF 570 MAX 570 MIN 571 MINUS 571 MOD 572 MONTHS_BETWEEN 572 NEW_TIME 573 NEXT_DAY 574 NEXTVAL 574 NLS_CHARSET_DECL_LEN 575 NLS_CHARSET_ID 575 NLS_CHARSET_NAME 576 NLS_INITCAP 576 NLS_LOWER 577 NLS_UPPER 577 NO_DATA_FOUND 578 NOAUDIT 579 NOT_LOGGED_ON 579 NULL 580 NVL 581 OPEN 581 OPEN-FOR 582 运算符 582 运算符— < > 583 运算符—> 583 运算符—> = 584 运算符—! = 584 运算符—* 585 运算符—+ 586 运算符—-* 586 运算符—/ 587 运算符—<= 587 运算符—= 588 运算符—AND 589 运算符—BETWEEN 589 运算符—IN 590 运算符—IS NOT NULL 590 运算符—IS NULL 591 运算符—NOT 591 运算符—NOT BETWEEN 592 运算符—NOT IN 592 运算符—OR 593 PRIOR 593 PROGRAM_ERROR 594 PROMPT 595 PSEUDOCOLUMN 595 RAISE 595 RAWTOHEX 596 RECORD 596 REFTOHEX 597 REMARK 598 RENAME 598 REPFOOTER 599 REPHEADER 599 REPLACE 600 REPLACE 601 RETURN 601 REVOKE 602 ROLLBACK 603 ROUND 603 ROWIDTOCHAR 604 ROWTYPE_MISMATCH 605 RPAD 606 RTRIM 606 SAVE 607 SAVEPOINT 607 SELECT 608 SELECT INTO 608 SET 609 SET ROLE 611 SET TRANSACTION 612 SHOW 612 SIGN 613 SIN 614 SINH 614 SOUNDEX 615 SPOOL 615 SQLERRM 616 SQLPLUS 616 SQRT 617 START 617 STDDEV 618 STORAGE 618 STORAGE_ERROR 619 STORE 619 SUBSTR 620 SUBSTRB 620 SUM 621 SYSDATE 622 TABLE 622 TAN 623 TANH 623 TIMEOUT_ON_RESOURCE 624 TIMING 624 TO_CHAR (date) 625 TO_CHAR (label) 625 TO_CHAR (number) 626 TO_DATE (char) 626 TO_LABEL (char) 627 TO_MULTI_BYTE (char) 627 TO_NUMBER (char) 628 TO_SINGLE_BYTE (char) 628 TOO_MANY_ROWS 629 TRANSLATE 629 TRUNC (date) 630 TRUNC (number) 631 TRUNCATERUNCATE 631 TTITLE 632 UID 633 UNDEFINE 633 UNION 634 UNION ALL 634 UPDATE 635 UPPER 636 USER 636 USERENV 637 VALUE_ERROR 638 VARIABLE 638 VARIABLE ASSIGNMENT 639 VARIANCE 639 VSIZE 640 RESERVED WORDS 640 WHENEVER OSERROR 641 WHENEVER SQLERROR 642 WHILE-LOOP 642 ZERO_DIVIDE 643
1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>sqlplus SQL>connect internal SQL>startup SQL>quit b、关闭ORACLE系统 oracle>sqlplus SQL>connect internal SQL>shutdown SQL>quit 启动oracle9i数据库命令: $ sqlplus /nolog SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect / as sysdba Connected to an idle instance. SQL> startup^C SQL> startup ORACLE instance started. 2、在双机环境下 要想启动或关闭ORACLE系统必须首先切换到root用户,如下 su - root a、启动ORACLE系统 hareg -y oracle b、关闭ORACLE系统 hareg -n oracle Oracle数据库有哪几种启动方式 说明: 有以下几种启动方式: 1、startup nomount 非安装启动,这种方式启动下可执行:重建控制文件、重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。 2、startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档、 数据库介质恢复、 使数据文件联机或脱机, 重新定位数据文件、重做日志文件。 执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文件和日志文件进行校验检查。 3、startup open dbname 先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件, 这种方式下可访问数据数据。 4、startup,等于以下三个命令 startup nomount alter database mount alter database open 5、startup restrict 约束方式启动 这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示: ERROR: ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、startup force 强制启动方式 当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7、startup pfile=参数文件名 带初始化参数文件的启动方式 先读取参数文件,再按参数文件的设置启动数据库 例:startup pfile=E:Oracleadminoradbpfileinit.ora 8、startup EXCLUSIVE 二、用户如何有效地利用数据字典  ORACLE数据字典是数据库的重要组成部之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计数据库的视图等。 我们不能手工修改数据字典里的信息。   很多时候,一般的ORACLE用户不知道如何有效地利用它。   dictionary   全部数据字典表的名称和解释,它有一个同义词dict dict_column   全部数据字典表里字段名称和解释 如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: SQL>select * from dictionary where instr(comments,'index')>0; 如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句: SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES'; 依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。 下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 2、表 查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>select object_name,object_id from user_objects where instr(object_name,'LOG')>0; 查看某表的创建时间 SQL>select object_name,created from user_objects where object_name=upper('&table_name'); 查看某表的大小 SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&table_name'); 查看放在ORACLE的内存区里的表 SQL>select table_name,cache from user_tables where instr(cache,'Y')>0; 3、索引 查看索引个数和类别 SQL>select index_name,index_type,table_name from user_indexes order by table_name; 查看索引被索引的字段 SQL>select * from user_ind_columns where index_name=upper('&index_name'); 查看索引的大小 SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&index_name'); 4、序列号 查看序列号,last_number是当前值 SQL>select * from user_sequences; 5、视图 查看视图的名称 SQL>select view_name from user_views; 查看创建视图的select语句 SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小 SQL>select text from user_views where view_name=upper('&view_name'); 6、同义词 查看同义词的名称 SQL>select * from user_synonyms; 7、约束条件 查看某表的约束条件 SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('&table_name'); SQL>select c.constraint_name,c.constraint_type,cc.column_name from user_constraints c,user_cons_columns cc where c.owner = upper('&table_owner') and c.table_name = upper('&table_name') and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position; 8、存储函数和过程 查看函数和过程的状态 SQL>select object_name,status from user_objects where object_type='FUNCTION'; SQL>select object_name,status from user_objects where object_type='PROCEDURE'; 查看函数和过程的源代码 SQL>select text from all_source where wner=user and name=upper('&plsql_name'); 三、查看数据库的SQL 1、查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name; 2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 3、查看回滚段名称及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+) order by segment_name ; 4、查看控制文件 select name from v$controlfile; 5、查看日志文件 select member from v$logfile; 6、查看表空间的使用情况 select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name; SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME; 7、查看数据库库对象 select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status; 8、查看数据库的版本 Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle'; 9、查看数据库的创建日期和归档方式 Select Created, Log_Mode, Log_Mode From V$Database; 四、ORACLE用户连接的管理 用系统管理员,查看当前数据库有几个用户连接: SQL> select username,sid,serial# from v$session; 如果要停某个连接用 SQL> alter system kill session 'sid,serial#'; 如果这命令不行,找它UNIX的进程数 SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 说明:21是某个连接的sid数 然后用 kill 命令杀此进程号。 五、SQL*PLUS使用 a、近入SQL*Plus $sqlplus 用户名/密码 退出SQL*Plus SQL>exit b、在sqlplus下得到帮助信息 列出全部SQL命令和SQL*Plus命令 SQL>help 列出某个特定的命令的信息 SQL>help 命令名 c、显示表结构命令DESCRIBE SQL>DESC 表名 d、SQL*Plus的编辑命令 显示SQL缓冲区命令 SQL>L 修改SQL命令 首先要将待改正行变为当前行 SQL>n 用CHANGE命令修改内容 SQL>c/旧/新 重新确认是否已正确 SQL>L 使用INPUT命令可以在SQL缓冲区增加一行或多行 SQL>i SQL>输入内容 e、调用外部系统编辑器 SQL>edit 文件名 可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的命令格式如下: create table 表名 (列说明列表); 为基表增加新列命令如下: ALTER TABLE 表名 ADD (列说明列表) 例:为test表增加一列Age,用来存放年龄 sql>alter table test add (Age number(3)); 修改基表列定义命令如下: ALTER TABLE 表名 MODIFY (列名 数据类型) 例:将test表的Count列宽度加长为10个字符 sql>alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和表的定义 sql>drop table test c、表空间的创建、删除 六、ORACLE逻辑备份的SH文件 完全备份的SH文件:exp_comp.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp" 累计备份的SH文件:exp_cumu.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumu$rq.dmp" 增量备份的SH文件: exp_incr.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incr$rq.dmp" root用户crontab文件 /var/spool/cron/crontabs/root增加以下内容 0 2 1 * * /oracle/exp_comp.sh 30 2 * * 0-5 /oracle/exp_incr.sh 45 2 * * 6 /oracle/exp_cumu.sh 当然这个时间表可以根据不同的需求来改变的,这只是一个例子。 七、ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验. 日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒 或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’) TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC. 年-月-日 小时:钟:秒 的格式YYYY-MM-DD HH24:MI:SS INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型, 方法借用ORACLE里自带的DBMS_LOB程序包. INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号 CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE; 其最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999 INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL 2.DELETE (删除数据表里记录的语句) DELETE FROM表名 WHERE 条件; 注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused. 如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间 TRUNCATE TABLE 表名; 此操作不可回退. 3.UPDATE (修改数据表里记录的语句) UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件; 如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验; 值N超过定义的长度会出错, 最好在插入前进行长度校验.. 注意事项: A. 以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效, 否则改变不一定写入数据库里. 如果想撤回这些操作, 可以用命令 ROLLBACK 复原. B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段. 程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句次完成, 其间加上COMMIT 确认事物处理. 二.数据定义 (DDL) 部 1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等) ORACLE常用的字段类型有 CHAR 固定长度的字符串 VARCHAR2 可变长度的字符串 NUMBER(M,N) 数字型M是位数总长度, N是小数的长度 DATE 日期类型 创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面 创建表时可以用文的字段名, 但最好还是用英文的字段名 创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE 这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间 创建表时可以给字段加上约束条件 例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY 2.ALTER (改变表, 索引, 视图等) 改变表的名称 ALTER TABLE 表名1 TO 表名2; 在表的后面增加一个字段 ALTER TABLE表名 ADD 字段名 字段名描述; 修改表里字段的定义描述 ALTER TABLE表名 MODIFY字段名 字段名描述; 给表里的字段加上约束条件 ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名); ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名); 把表放在或取出数据库的内存区 ALTER TABLE 表名 CACHE; ALTER TABLE 表名 NOCACHE; 3.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等) 删除表和它所有的约束条件 DROP TABLE 表名 CASCADE CONSTRAINTS; 4.TRUNCATE (清空表里的所有记录, 保留表的结构) TRUNCATE 表名; 三.查询语句 (SELECT) 部 SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件; 字段名可以带入函数 例如: COUNT(*), MIN(字段名), MAX(字段名), AVG(字段名), DISTINCT(字段名), TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS') NVL(EXPR1, EXPR2)函数 解释: IF EXPR1=NULL RETURN EXPR2 ELSE RETURN EXPR1 DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数 解释: IF AA=V1 THEN RETURN R1 IF AA=V2 THEN RETURN R2 ..… ELSE RETURN NULL LPAD(char1,n,char2)函数 解释: 字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位 字段名之间可以进行算术运算 例如: (字段名1*字段名1)/3 查询语句可以嵌套 例如: SELECT …… FROM (SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2; 两个查询语句的结果可以做集合操作 例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS, 交集INTERSECT 组查询 SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1 [HAVING 条件] ; 两个以上表之间的连接查询 SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 表名1.字段名 = 表名2. 字段名 [ AND ……] ; SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 表名1.字段名 = 表名2. 字段名(+) [ AND ……] ; 有(+)号的字段位置自动补空值 查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] ORDER BY字段名1, 字段名2 DESC; 字符串模糊比较的方法 INSTR(字段名, ‘字符串’)>0 字段名 LIKE ‘字符串%’ [‘%字符串%’] 每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性. 四.ORACLE里常用的数据对象 (SCHEMA) 1.索引 (INDEX) CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] ); ALTER INDEX 索引名 REBUILD; 一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句析执行情况, 也可以建立多字段的组合索引和基于函数的索引 ORACLE8.1.7字符串可以索引的最大长度为1578 单字节 ORACLE8.0.6字符串可以索引的最大长度为758 单字节 2.视图 (VIEW) CREATE VIEW 视图名AS SELECT …. FROM …..; ALTER VIEW视图名 COMPILE; 视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化. 3.同义词 (SYNONMY) CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名; 4.数据库链接 (DATABASE LINK) CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’; 数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义. 数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样 数据库全局名称可以用以下命令查出 SELECT * FROM GLOBAL_NAME; 查询远端数据库里的表 SELECT …… FROM 表名@数据库链接名; 五.权限管理 (DCL) 语句 1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个: ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名, DELETE ON 数据对象名, INSERT ON 数据对象名, ALTER ON 数据对象名 GRANT CONNECT, RESOURCE TO 用户名; GRANT SELECT ON 表名 TO 用户名; GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2; 2.REVOKE 回收权限 REVOKE CONNECT, RESOURCE FROM 用户名; REVOKE SELECT ON 表名 FROM 用户名; REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2; 查询数据第63号错误: select orgaddr,destaddr from sm_histable0116 where error_code='63'; 查询数据开户用户最大提交和最大下发数: select MSISDN,TCOS,OCOS from ms_usertable; 查询数据各种错误代码的总和: select error_code,count(*) from sm_histable0513 group by error_code order by error_code; 查询报表数据话单统计种类查询。 select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111 select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype 导文件exp和imp 例子: exp cjxt/cjxt tables=dcardres file=dcardres.dmp impgzcj/gzcj@oracletables=dcardres file=dcardres.dmp 查看有没有锁表 SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name, o.owner,o.object_name,o.object_type,s.sid,s.serial# FROM v$locked_object l,dba_objects o,v$session s WHERE l.object_id=o.object_id AND l.session_id=s.sid [Q]怎么杀掉特定的数据库会话 [A] Alter system kill session 'sid,serial#'; 或者 alter system disconnect session 'sid,serial#' immediate; 在win上,还可以采用oracle提供的orakill杀掉一个线程(其实就是一个Oracle进程) 在Linux/Unix上,可以直接利用kill杀掉数据库进程对应的OS进程 [Q]怎么快速查找锁与锁等待 [A]数据库的锁是比较耗费资源的, 特别是发生锁等待的时候,我们必须找到发生等待的锁,有可能的话,杀掉该进程。 这个语句将查找到数据所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。 可以通过alter system kill session ‘sid,serial#’来杀掉会话 SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) LOCK_LEVEL, o.owner,o.object_name,o.object_type, s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser FROM v$session s,v$lock l,dba_objects o WHERE l.sid = s.sid AND l.id1 = o.object_id(+) AND s.username is NOT NULL 如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待 以下的语句可以查询到谁锁了表,而谁在等待。 SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name, o.owner,o.object_name,o.object_type,s.sid,s.serial# FROM v$locked_object l,dba_objects o,v$session s WHERE l.object_id=o.object_id AND l.session_id=s.sid ORDER BY o.object_id,xidusn DESC ------------------------------- ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup SVRMGR>quit b、关闭ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>shutdown SVRMGR>quit 启动oracle9i数据库命令: $ sqlplus /nolog SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect / as sysdba Connected to an idle instance. SQL> startup^C SQL> startup ORACLE instance started. 2、在双机环境下 要想启动或关闭ORACLE系统必须首先切换到root用户,如下 su - root a、启动ORACLE系统 hareg -y oracle b、关闭ORACLE系统 hareg -n oracle Oracle数据库有哪几种启动方式 说明: 有以下几种启动方式: 1、startup nomount 非安装启动,这种方式启动下可执行:重建控制文件、重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。 2、startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档、 数据库介质恢复、 使数据文件联机或脱机, 重新定位数据文件、重做日志文件。 执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文件和日志文件进行校验检查。 3、startup open dbname 先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件, 这种方式下可访问数据数据。 4、startup,等于以下三个命令 startup nomount alter database mount alter database open 5、startup restrict 约束方式启动 这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示: ERROR: ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、startup force 强制启动方式 当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7、startup pfile=参数文件名 带初始化参数文件的启动方式 先读取参数文件,再按参数文件的设置启动数据库 例:startup pfile=E:Oracleadminoradbpfileinit.ora 8、startup EXCLUSIVE 二、用户如何有效地利用数据字典  ORACLE数据字典是数据库的重要组成部之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计数据库的视图等。 我们不能手工修改数据字典里的信息。   很多时候,一般的ORACLE用户不知道如何有效地利用它。   dictionary   全部数据字典表的名称和解释,它有一个同义词dict dict_column   全部数据字典表里字段名称和解释 如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: SQL>select * from dictionary where instr(comments,'index')>0; 如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句: SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES'; 依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。 下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 2、表 查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>select object_name,object_id from user_objects where instr(object_name,'LOG')>0; 查看某表的创建时间 SQL>select object_name,created from user_objects where object_name=upper('&table_name'); 查看某表的大小 SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&table_name'); 查看放在ORACLE的内存区里的表 SQL>select table_name,cache from user_tables where instr(cache,'Y')>0; 3、索引 查看索引个数和类别 SQL>select index_name,index_type,table_name from user_indexes order by table_name; 查看索引被索引的字段 SQL>select * from user_ind_columns where index_name=upper('&index_name'); 查看索引的大小 SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&index_name'); 4、序列号 查看序列号,last_number是当前值 SQL>select * from user_sequences; 5、视图 查看视图的名称 SQL>select view_name from user_views; 查看创建视图的select语句 SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小 SQL>select text from user_views where view_name=upper('&view_name'); 6、同义词 查看同义词的名称 SQL>select * from user_synonyms; 7、约束条件 查看某表的约束条件 SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('&table_name'); SQL>select c.constraint_name,c.constraint_type,cc.column_name from user_constraints c,user_cons_columns cc where c.owner = upper('&table_owner') and c.table_name = upper('&table_name') and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position; 8、存储函数和过程 查看函数和过程的状态 SQL>select object_name,status from user_objects where object_type='FUNCTION'; SQL>select object_name,status from user_objects where object_type='PROCEDURE'; 查看函数和过程的源代码 SQL>select text from all_source where owner=user and name=upper('&plsql_name'); 三、查看数据库的SQL 1、查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name; 2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 3、查看回滚段名称及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+) order by segment_name ; 4、查看控制文件 select name from v$controlfile; 5、查看日志文件 select member from v$logfile; 6、查看表空间的使用情况 select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name; SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME; 7、查看数据库库对象 select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status; 8、查看数据库的版本 Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle'; 9、查看数据库的创建日期和归档方式 Select Created, Log_Mode, Log_Mode From V$Database; 四、ORACLE用户连接的管理 用系统管理员,查看当前数据库有几个用户连接: SQL> select username,sid,serial# from v$session; 如果要停某个连接用 SQL> alter system kill session 'sid,serial#'; 如果这命令不行,找它UNIX的进程数 SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 说明:21是某个连接的sid数 然后用 kill 命令杀此进程号。 五、SQL*PLUS使用 a、近入SQL*Plus $sqlplus 用户名/密码 退出SQL*Plus SQL>exit b、在sqlplus下得到帮助信息 列出全部SQL命令和SQL*Plus命令 SQL>help 列出某个特定的命令的信息 SQL>help 命令名 c、显示表结构命令DESCRIBE SQL>DESC 表名 d、SQL*Plus的编辑命令 显示SQL缓冲区命令 SQL>L 修改SQL命令 首先要将待改正行变为当前行 SQL>n 用CHANGE命令修改内容 SQL>c/旧/新 重新确认是否已正确 SQL>L 使用INPUT命令可以在SQL缓冲区增加一行或多行 SQL>i SQL>输入内容 e、调用外部系统编辑器 SQL>edit 文件名 可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的命令格式如下: create table 表名 (列说明列表); 为基表增加新列命令如下: ALTER TABLE 表名 ADD (列说明列表) 例:为test表增加一列Age,用来存放年龄 sql>alter table test add (Age number(3)); 修改基表列定义命令如下: ALTER TABLE 表名 MODIFY (列名 数据类型) 例:将test表的Count列宽度加长为10个字符 sql>alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和表的定义 sql>drop table test c、表空间的创建、删除 六、ORACLE逻辑备份的SH文件 完全备份的SH文件:exp_comp.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp" 累计备份的SH文件:exp_cumu.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumu$rq.dmp" 增量备份的SH文件: exp_incr.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incr$rq.dmp" root用户crontab文件 /var/spool/cron/crontabs/root增加以下内容 0 2 1 * * /oracle/exp_comp.sh 30 2 * * 0-5 /oracle/exp_incr.sh 45 2 * * 6 /oracle/exp_cumu.sh 当然这个时间表可以根据不同的需求来改变的,这只是一个例子。 七、ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验. 日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒 或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’) TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC. 年-月-日 小时:钟:秒 的格式YYYY-MM-DD HH24:MI:SS INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型, 方法借用ORACLE里自带的DBMS_LOB程序包. INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号 CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE; 其最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999 INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL 2.DELETE (删除数据表里记录的语句) DELETE FROM表名 WHERE 条件; 注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused. 如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间 TRUNCATE TABLE 表名; 此操作不可回退. 3.UPDATE (修改数据表里记录的语句) UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件; 如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验; 值N超过定义的长度会出错, 最好在插入前进行长度校验.. 注意事项: A. 以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效, 否则改变不一定写入数据库里. 如果想撤回这些操作, 可以用命令 ROLLBACK 复原. B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段. 程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句次完成, 其间加上COMMIT 确认事物处理. 二.数据定义 (DDL) 部 1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等) ORACLE常用的字段类型有 CHAR 固定长度的字符串 VARCHAR2 可变长度的字符串 NUMBER(M,N) 数字型M是位数总长度, N是小数的长度 DATE 日期类型 创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面 创建表时可以用文的字段名, 但最好还是用英文的字段名 创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE 这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间 创建表时可以给字段加上约束条件 例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY 2.ALTER (改变表, 索引, 视图等) 改变表的名称 ALTER TABLE 表名1 TO 表名2; 在表的后面增加一个字段 ALTER TABLE表名 ADD 字段名 字段名描述; 修改表里字段的定义描述 ALTER TABLE表名 MODIFY字段名 字段名描述; 给表里的字段加上约束条件 ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名); ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名); 把表放在或取出数据库的内存区 ALTER TABLE 表名 CACHE; ALTER TABLE 表名 NOCACHE; 3.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等) 删除表和它所有的约束条件 DROP TABLE 表名 CASCADE CONSTRAINTS; 4.TRUNCATE (清空表里的所有记录, 保留表的结构) TRUNCATE 表名; 三.查询语句 (SELECT) 部 SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件; 字段名可以带入函数 例如: COUNT(*), MIN(字段名), MAX(字段名), AVG(字段名), DISTINCT(字段名), TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS') NVL(EXPR1, EXPR2)函数 解释: IF EXPR1=NULL RETURN EXPR2 ELSE RETURN EXPR1 DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数 解释: IF AA=V1 THEN RETURN R1 IF AA=V2 THEN RETURN R2 ..… ELSE RETURN NULL LPAD(char1,n,char2)函数 解释: 字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位 字段名之间可以进行算术运算 例如: (字段名1*字段名1)/3 查询语句可以嵌套 例如: SELECT …… FROM (SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2; 两个查询语句的结果可以做集合操作 例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS, 交集INTERSECT 组查询 SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1 [HAVING 条件] ; 两个以上表之间的连接查询 SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 表名1.字段名 = 表名2. 字段名 [ AND ……] ; SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 表名1.字段名 = 表名2. 字段名(+) [ AND ……] ; 有(+)号的字段位置自动补空值 查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] ORDER BY字段名1, 字段名2 DESC; 字符串模糊比较的方法 INSTR(字段名, ‘字符串’)>0 字段名 LIKE ‘字符串%’ [‘%字符串%’] 每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性. 四.ORACLE里常用的数据对象 (SCHEMA) 1.索引 (INDEX) CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] ); ALTER INDEX 索引名 REBUILD; 一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句析执行情况, 也可以建立多字段的组合索引和基于函数的索引 ORACLE8.1.7字符串可以索引的最大长度为1578 单字节 ORACLE8.0.6字符串可以索引的最大长度为758 单字节 2.视图 (VIEW) CREATE VIEW 视图名AS SELECT …. FROM …..; ALTER VIEW视图名 COMPILE; 视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化. 3.同义词 (SYNONMY) CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名; 4.数据库链接 (DATABASE LINK) CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’; 数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义. 数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样 数据库全局名称可以用以下命令查出 SELECT * FROM GLOBAL_NAME; 查询远端数据库里的表 SELECT …… FROM 表名@数据库链接名; 五.权限管理 (DCL) 语句 1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个: ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名, DELETE ON 数据对象名, INSERT ON 数据对象名, ALTER ON 数据对象名 GRANT CONNECT, RESOURCE TO 用户名; GRANT SELECT ON 表名 TO 用户名; GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2; 2.REVOKE 回收权限 REVOKE CONNECT, RESOURCE FROM 用户名; REVOKE SELECT ON 表名 FROM 用户名; REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2; 查询数据第63号错误: select orgaddr,destaddr from sm_histable0116 where error_code='63'; 查询数据开户用户最大提交和最大下发数: select MSISDN,TCOS,OCOS from ms_usertable; 查询数据各种错误代码的总和: select error_code,count(*) from sm_histable0513 group by error_code order by error_code; 查询报表数据话单统计种类查询。 select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111 select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype //创建一个控制文件命令到跟踪文件 alter database backup controlfile to trace; //增加一个新的日志文件组的语句 connect internal as sysdba alter database add logfile group 4 (’/db01/oracle/CC1/log_1c.dbf’, ’/db02/oracle/CC1/log_2c.dbf’) size 5M; alter database add logfile member ’/db03/oracle/CC1/log_3c.dbf’ to group 4;

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧