断点

每天进步一点点!
posts - 174, comments - 56, trackbacks - 0, articles - 21

1、SELECT nvl(C_REMARK,chr(0)) into :sRate
       from T_COMM_CODE
       where c_cde = trim(:sText2) and rownum = 1;

nvl是个函数,作用是如果第一个参数为空值,则返回第二个参数的值,否则返回第一个参数的值。

chr(0)将数字0转化为字符0。

2、Y.YJKSBH=X.ZXKSBH(+) AND Y.ZLXMID=X.ZLXMID(+)
(+)表示左连接,就是在做关联之后,y表中存在而x表中不存在的数据也能查出来。


posted @ 2009-06-13 17:46 断点 阅读(72) | 评论 (0)

posted @ 2010-01-14 21:53 断点 阅读(251) | 评论 (0)编辑 收藏

原因:出现这个问题,可能有人move过表,或者disable 过索引。
1、alter table xxxxxx move tablespace xxxxxxx 命令后,索引就会失效。
2、alter index index_name  unusable,命令使索引失效。

解决办法:
1、重建索引才是解决这类问题的完全的方法。
alter index index_name rebuild (online);
2、如果是分区索引只需要重建那个失效的分区 。
alter index index_name rebuild partition partition_name (online);

说明:
1. alter session set skip_unusable_indexes=true;就可以在session级别跳过无效索引作查询。
2.分区索引应适用user_ind_partitions。
3.状态分4种:
N/A说明这个是分区索引需要查user_ind_partitions或者user_ind_subpartitions来确定每个分区是否可用;
VAILD说明这个索引可用;
UNUSABLE说明这个索引不可用;
USABLE 说明这个索引的分区是可用的。

http://www.sudu.cn/info/html/edu/20071225/20526.html
http://blog.oracle.com.cn/html/65/t-122265.html



posted @ 2009-05-19 19:16 断点 阅读(369) | 评论 (0)

posted @ 2010-01-14 21:52 断点 阅读(1050) | 评论 (0)编辑 收藏

比如定义为number(4,2),却要插入一个值200.12的话,就会出错啊,原因是number(p,s)的问题。

number(p,s),其中p表示该number的总长度,s为小数位。
如果s为负数,则会取相应位数的取整。
例如,如果number(4,-3),则数字1234的存储值为1000;如果number(4,-2),则数字1234的存储值为1200。

在对数据库表中的字段设定类型时,要注意:
NUMBER(10,6)  Double   带有小数
NUMBER(4)     Long     为整数


posted @ 2009-05-16 17:31 断点 阅读(363) | 评论 (0)

posted @ 2010-01-14 21:51 断点 阅读(7370) | 评论 (0)编辑 收藏

Blob是指二进制大对象也就是英文Binary Large Object的所写;
Clob是指大字符对象也就是英文Character Large Object的所写。
因此这两个类型都是用来存储大量数据而设计的,其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。

在JDBC中有两个接口对应数据库中的BLOB和CLOB类型,java.sql.Blob和java.sql.Clob。和你平常使用数据库一样你可以直接通过ResultSet.getBlob()方法来获取该接口的对象。与平时的查找唯一不同的是得到Blob或Clob的对象后,我们并没有得到任何数据,但是我们可以这两个接口中的方法得到数据。
例如:
Blob b=resultSet.getBlob(1);
InputStream bin=b.getBinaryStream();
Clob c=resultSet.getClob(2);
Reader cReader=c.getCharacterStream():
 
另外还有一种获取方法,不使用数据流,而是使用数据块。
例如
Blob b=resultSet.getBlob(1);
byte data=b.getByte(0,b.length());
Clob c=resultSet.getClob(2);
String str=c.getSubString(0,c.length());
在这里要说明一下,这个方法其实并不安全,如果你很细心的话,那很容易就能发现getByte()和getSubString()两个方法中的第二个参数都是int类型的,而BLOB和CLOB是用来存储大量数据的。而且Bolb.length()和Clob.length()的返回值都是long类型的,所以很不安全。


那么有人肯定要问既然已经有VARCHAR和VARBINARY两中类型,为什么还要再使用另外的两种类型呢?
原因:VARCHAR和VARBINARY两种类型是有自己的局限性的。首先说这两种类型的长度还是有限的不可以超过一定的限额,以VARCHAR在ORA中为例长度不可以超过4000;而LONGVARCHAR类型的一个重要缺陷就是不可以使用LIKE这样的条件检索。

另外就是在数据库中VARCHAR和VARBINARY的存取是将全部内容从全部读取或写入,对于100K或者说更大数据来说这样的读写方式,远不如用流进行读写来得更现实一些。


posted @ 2009-05-16 19:26 断点 阅读(166) | 评论 (0)

posted @ 2010-01-14 21:51 断点 阅读(338) | 评论 (0)编辑 收藏

在oracle中建有date类型的字段,插入可以采取如下方法:

如果是小时为:1-12 采取如下格式:yyyy-mm-dd HH:MI:SS
insert into test values(to_date('2009-5-7 07:09:37','yyyy-mm-dd HH:MI:SS'));


如果是小时为:1-24 采取如下格式:yyyy-mm-dd HH24:MI:SS
insert into test values(to_date('2009-5-7 17:09:37','yyyy-mm-dd HH24:MI:SS'));


posted @ 2009-05-07 20:14 断点 阅读(145) | 评论 (0)

posted @ 2010-01-14 21:49 断点 阅读(360) | 评论 (0)编辑 收藏

Caused by: java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值
我在系统的一个页面上加载一个.xml文件时,出现了这个错误。

原因:

当插入数据的长度在1000、2000内,就会抛出这样的错误。


解决方法:

思路:将存储的字符串补上空格,让其超过2000的长度即可,但仅限与紧急解决问题。
1、首先在.java文件中引入import org.apache.commons.lang.StringUtils;
2、在此.java文件的相应的方法里添加如下判断:

    // 处理ora-1461问题(clob长度在1000-2000之间会出错)
        if (xml.length() >= 1000 && xml.length() <= 2000) {
            xml = StringUtils.rightPad(xml, 2008);
        }

 

相关知识:

LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列
LONG RAW: 可变长二进制数据,最长2G
CLOB:  字符大对象Clob 用来存储单字节的字符数据
NCLOB: 用来存储多字节的字符数据
BLOB: 用于存储二进制数据
BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复。
其中CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制。要保存图片、文本文件、Word文件各自最好采用那種数据类型呢?BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。

相关链接:http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html


posted @ 2009-04-18 13:01 断点 阅读(676) | 评论 (0)

posted @ 2010-01-14 21:48 断点 阅读(392) | 评论 (0)编辑 收藏

今天跟新人安装oracle后,打开数据库查看表里面的数据,发现里面的数据全是“靠”字。
这可是以前没有出现过的。因此就查了一下,了解到是注册表的字符级问题。现解决如下:
 
在注册表里进行修改:
开始-->运行里面输入regedit-->我的电脑\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 里NLS_LANG的值
以前是:American_America.ZHS16GBK
现改为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

再一次打开oracle时,数据显示一切正常。


posted @ 2009-04-09 15:08 断点 阅读(118) | 评论 (0)

posted @ 2010-01-14 21:47 断点 阅读(260) | 评论 (0)编辑 收藏

现在在企业中,操作oracle数据库的客户端,除了PL/SQL外,使用的较多的就是TOAD了!

为此,我在网上搜索了下,整理了些简单TOAD的使用技巧,现分享给大家。


常用快捷键:

F8 调出以前执行的sql命令
F9 执行全部sql
Ctrl+t 补全table_name
Ctrl+. 补全table_name
alt+ 箭头上下 看sql history
Ctrl+Enter 直接执行当前sql
Ctrl+Shift+F  格式化sql语句。

如果还觉得不够用的话,可以在系统菜单空白处点击右键,进入menu shortcuts,自行定义快捷键。

 

toad下修改表中字段的值:
首先在schema Browser下查找到相应的表,在右边点击Data栏,然后选中一条记录,再点击Data栏下面的▲(Edit Record),即可修改字段里的值,然后点击√(Post edit),最后就是Commit了。


posted @ 2009-04-08 20:50 断点 阅读(637) | 评论 (0)

posted @ 2010-01-14 21:46 断点 阅读(1823) | 评论 (0)编辑 收藏

前序:关于Oracle9i数据的导出与导入问题,折腾我好长时间了,尤其是导入。今天在一位同事的指导下,算是终于成功了,为了记住这位同事的帮助,在此仅以“坤”作为记号。

正文:

Oracle数据导出:
如果是导出本机的Oracle数据库:
exp pcisv62/11@ORCL  file="d:\pcisv62081226.dmp"  full=y   
(ORCL为本地数据库监听)

如果是导出服务器端的Oracle数据:
exp pcisv62/11@tnsname  file="d:\pcisv62081226.dmp" full=y
(tnsname为COREV6_DBSERVER,SID为COREV6,主机为DBSERVER。)
exp pcisv6_ab/11@COREV6_DBSERVER file=d:\v6100210.dmp rows=y buffer=1024000

注意:必须是 DBA 才能执行完整数据库或表空间导出操作。


Oracle数据导入,分以下步骤:
1.先在Oracle9i的Enterprise Manager Console下,以sys/sys及sysdba身份登陆,在“存储”-->“表空间”下创建表空间COREV6,同时给其分配合适的空间。
2.在“安全性”-->“用户”下创建用户pcisv62,使用户默认的表空间为COREV6,同时在“角色”里授予CONNECT、DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE、RESOURCE。
3.导入.dmp文件,开始-->运行cmd,导入命令:
imp pcisv6_ab/11@ORCL file=d:\v6100210.dmp  full=y ignore=y

注意:如果备份的.dmp文件是以用户pcisv62导出COREV6空间的数据,那么
1.新建的用户最好是pcisv62,否则命令为:
  imp pcisv62/11@ORCL file=d:\v6100210.dmp   fromuser=pcisv62  touser=pcisv6_ab   full=y  ignore=y  rows=y  tablespaces=corev6
2.与新建用户关联的新建空间名必须为COREV6,否则Oracle报找不到COREV6空间的错误。

 

数据成功导入以后,下一步就是配置Tomcat的server.xml文件:
1.如果用到的是本机上的数据,本地数据源里的部分配置为: username="pcisv62" password="11"

url="jdbc:oracle:thin:@localhost:1521:orcl"
2.如果用到的是服务器上的数据,则数据源里的部分配置为: username="pcisv62" password="11"

url="jdbc:oracle:thin:@dbserver:1521:corev6"(dbserver为服务器的名字,corev6为服务器上Oracle的SID)

 

oracle的安装目录E:\oracle\ora92\network\admin下的tnsnames.ora:
本地配置:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 主机名)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )
或服务器配置:
COREV6_DBSERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = COREV6)
      (SERVER = DEDICATED)
    )
  )


以下转载:几种导入导出的命令方法,以备以后查阅。
数据导出:
exp qhmis/qhmis@qhmis  file='d:\backup\qhmis\qhmis20060526.dmp'  grants=y  full=n
 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
   exp system/manager@TEST file=d:\daochu.dmp full=y
 2 将数据库中system用户与sys用户的表导出
   exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
 3 将数据库中的表table1 、table2导出
   exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
   exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"      
数据的导入:
 1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
   imp system/manager@TEST  file=d:\daochu.dmp
   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
   在后面加上 ignore=y 就可以了。
 2 将d:\daochu.dmp中的表table1 导入
 imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)


posted @ 2009-03-04 17:06 断点 阅读(1224) | 评论 (0)

posted @ 2010-01-14 21:45 断点 阅读(672) | 评论 (0)编辑 收藏

系统环境:WindowXP。

oracle9i  安装到最后,更改了:sys口令:sys    system口令:system   

现在需要以system身份登陆sql*puls,方法有二:

 

第一种方法:.进入SQL*Plus后在弹出对话框中直接点击“确定”,   
  请输入用户名:sys   as   sysdba   

     请输入口令:sys  


第二种方法:进入Dos窗口,输入一下命令:  
  c:\>sqlplus   /nolog  
  SQL>conn   sys/password   as   sysdba

注意:sys的权限最大!是默认的DBA!一般不在该用户下建用户表,PACKAGE等!system的权限就差一些。


posted @ 2009-02-27 14:55 断点 阅读(96) | 评论 (0)

posted @ 2010-01-14 21:44 断点 阅读(389) | 评论 (0)编辑 收藏

仅列出标题
共18页: First 上一页 8 9 10 11 12 13 14 15 16 下一页 Last