1。
Posted on 2008-07-21 13:35
张荣华
阅读(10899)
评论(1)
编辑
收藏
所属分类:
DB

<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://www.cnblogs.com/zhangronghua/archive/2008/07/21/1247623.html" dc:identifier="http://www.cnblogs.com/zhangronghua/archive/2008/07/21/1247623.html" dc:title="" trackback:ping="http://www.cnblogs.com/zhangronghua/services/trackbacks/1247623.aspx" /> </rdf:RDF> -->
错误原因:
在Oracle新建了一个表,名为“QueryHistory",用来保存用户的查询记录,这时,再用"Select * from QueryHistory"来查询,报 "ORA-00942: 表或视图不存在 "
错误分析:
利用Google搜索,找到了原因:
oracle是大小写敏感的,如果定义表名称或列名称的时候没有用引号引起来的话 oracle会把他们全部转换为大写,这时就会出现错误了.
解决方法:
将语句改为"Select * from "QueryHistory" 或是语句全部大写
2。oracle 创建空间用户名脚本
--创建表空间
create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
autoextend next on 100m
maxsize unlimited;
--创建用户
SQL> create user root identified by root default tablespace tblspace_et temporary tablespace temp;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as SYS
SQL> create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
2 autoextend next on 100m
3 maxsize unlimited;
create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
autoextend next on 100m
maxsize unlimited
ORA-02491: AUTOEXTEND 子句中缺少要求的关键字 ON 或 OFF
SQL> create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
2 autoextend on next 100m
3 maxsize unlimited;
Tablespace created
SQL> create user root identified by root default tablespace tblspace_et temporary tablespace temp;
User created
SQL> grant dba to root;
Grant succeeded
SQL>
|
3.Oracle自增序列在Hibernate中的配置方法
在很多情况下,我们使用Hibernate
在已经建立好数据库的基础上。在oracle中,如果已经建立好的数据库中使用了sequence,则可以按照下面的步骤把它引入到Hibernate中:
1、在oracle 首先创建sequence
CREATE SEQUENCE SEQ_ID
INCREMENT BY 1
START WITH 1
NOMINVALUE
NOMAXVALUE
NOCYCLE
NOCACHE
NOORDER;
2、在你的hbm.xml中的配置
<id column="ID0000" name="id" type="integer">
<generator class="sequence">
<param name="sequence">seq_id</param>
</generator>
</id>
这样再插入数据的时候,Hibernate回自动生成如下语句:
hibernate: select seq_id.nextval from dual
hibernate: insert into YXJK.T_YXJK_WHRYTXL (XM0000, ZW0000, LXDH00, SJHM00, DZYJ00, IP0000, ID0000) values (?, ?, ?, ?, ?, ?, ?)
自动生成下一个序列值,然后将对象插入表中。
在使用的时候需要注意,Hibernate对于sequence的主键的要求是一定要是shor,long,或者integer
根据hibernate的文档,有两种方式实现实体对象的主键自动增长。
第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MS-SQL,MY-SQL中的自动增长一样,不需要创建触发器,具体的oracle数据库脚本及hibernate配置文件如下:
[1]oracle数据表的创建脚本:
CREATE TABLE DEPARTMENT (
ID NUMBER(19,0) DEFAULT '0' NOT NULL,
NAME VARCHAR2(255) NOT NULL,
DESCRIPTION CLOB
);
ALTER TABLE DEPARTMENT ADD CONSTRAINT PRIMARY_0 PRIMARY KEY(ID) ENABLE;
ALTER TABLE DEPARTMENT ADD CONSTRAINT UK_DEPARTMENT_1 UNIQUE (NAME);
CREATE SEQUENCE DEPARTMENT_ID_SEQ MINVALUE 10000 MAXVALUE 999999999999999999999999 INCREMENT BY 1 NOCYCLE;
创建DEPARTMENT表,并为DEPARTMENT表创建一个单独的SEQUENCE,名字为SEQUENCE_ID_SEQ,并不需要创建触发器。
[2]hibernate映射文件的配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.liyanframework.demo.domain">
<class name="Department" table="DEPARTMENT">
<id name="id" column="ID">
<generator class="sequence">
<param name="sequence">DEPARTMENT_ID_SEQ</param>
</generator>
</id>
<property name="name" column="NAME" type="string" />
<property name="description" column="DESCRIPTION" type="text" />
</class>
</hibernate-mapping>
在hibernate映射文件中,对ID的生成策略选择sequence,指定sequence的名字DEPARTMENT_ID_SEQ就可以了,当你保存新对象的时候,hibernate会自动取得DEPARTMENT_ID_SEQ.NEXTVAL作为新对象的ID保存到数据库,所以不需要再使用触发器再来生成新记录的ID。
第二种:设置ID的增长策略是native,但是需要创建一个名字为hibernate_sequence(这个名字好像是hibernate默认的sequence名字,不创建会出错的)的全局使用的sequence,然后再对每一个表的ID生成的时候,使用触发器,取得 hibernate_sequence.CURRVAL作为新记录的ID,具体的oracle数据库脚本及hibernate配置文件如下:
[1]oracle数据表的创建脚本:
CREATE TABLE STAFF (
ID NUMBER(19,0) DEFAULT '0' NOT NULL,
NAME VARCHAR2(255) NOT NULL,
AGE NUMBER(3,0) NOT NULL,
BIRTHDAY DATE NOT NULL,
SALARY NUMBER(10,2) NOT NULL,
LEVELNESS FLOAT NOT NULL,
CREATETIME TIMESTAMP NOT NULL,
ENABLE CHAR(2) DEFAULT 'Y' NOT NULL,
STATUS VARCHAR2(64) NOT NULL,
DEPARTMENT_ID NUMBER(19,0)
);
ALTER TABLE STAFF ADD CONSTRAINT PRIMARY_1 PRIMARY KEY(ID) ENABLE;
ALTER TABLE STAFF ADD CONSTRAINT STAFF_IBFK_0 FOREIGN KEY(DEPARTMENT_ID) REFERENCES DEPARTMENT(ID) ENABLE;
ALTER TABLE STAFF ADD CONSTRAINT UK_STAFF_1 UNIQUE (NAME);
CREATE INDEX IDX_STAFF_STATUS ON STAFF(STATUS);
CREATE SEQUENCE HIBERNATE_SEQUENCE
INCREMENT BY 1
MINVALUE 90000
MAXVALUE 999999999999999999999999
NOCYCLE;
CREATE OR REPLACE TRIGGER STAFF_ID_TRG BEFORE INSERT ON STAFF FOR EACH ROW
BEGIN
IF INSERTING AND :NEW.ID IS NULL THEN
SELECT HIBERNATE_SEQUENCE.CURRVAL INTO :NEW.ID FROM DUAL;
END IF;
END;
创建STAFF表,但是并没有为STAFF创建相应的主键sequence,而是创建了一个名字为HIBERNATE_SEQUENCE的 sequence,然后创建一个触发器STAFF_ID_TRG,当执行INSERT操作时,hibernate会先执行一次 HIBERNATE_SEQUENCE.NEXTVAL,所以在触发器中只需要取得HIBERNATE_SEQUENCE.CURRVAL作为新记录的 ID。
[2]hibernate映射文件的配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.liyanframework.demo.domain">
<class name="Staff" table="STAFF">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="name" column="NAME" type="string" />
<property name="age" column="AGE" type="integer" />
<property name="birthday" column="BIRTHDAY" type="date" />
<property name="salary" column="SALARY" type="big_decimal" />
<property name="level" column="LEVELNESS" type="float" />
<property name="createTime" column="CREATETIME" type="timestamp" />
<property name="enable" column="ENABLE" type="character" />
<property name="status" column="STATUS" type="string" />
<many-to-one name="department" column="DEPARTMENT_ID" class="Department" />
</class>
</hibernate-mapping>
在hibernate映射文件中,对ID的生成策略选择native,hibernate会根据你数据库的触发器来生成新记录的ID。
比较两种做法,第二种做法也就是hibernate在代码中,实现了oracle中的触发器功能。对于不同的情况,选择不懂的做法。如果新的系统,新建的oracle数据库,推荐使用第一种做法,简单,容易移植到其他支持自动增长的数据库;如果是老的系统,需要把其他数据库转换为oracle 的,那就要用第二种了,使用native的方式,可以不改动配置文件,兼容oracle和mysql之类带有自动增长的数据库。
4. 表或试图不存在
<hibernate-mapping>
<class name="com.eetrust.component.entity.EtWebComponents" table="et_web_components" catalog="et_cms">
去掉catalog="et_cms"
分享到:
相关推荐
MySQL到Oracle数据库转换工具是一种专门用于将数据从MySQL数据库系统迁移至Oracle数据库系统的软件解决方案。在数据库管理系统领域,这样的工具非常关键,因为不同的DBMS(数据库管理系统)可能有着不同的数据结构、...
综上所述,`mysql2oracle`工具是解决跨数据库系统数据迁移问题的有效解决方案。它简化了从MySQL到Oracle的数据迁移流程,处理了多种技术细节,使得用户可以专注于业务逻辑的转移,而不是底层数据结构的转换。在实际...
在遇到问题时,应详细阅读Oracle文档中的错误信息,获取解决方案。 最后,所有配置完成后,可以通过Oracle数据库内部创建的数据库链接(database link)来测试是否能够成功访问MySQL数据库。创建和使用dblink的SQL...
总的来说,“Oracle转换MySQL工具2”是解决数据库迁移问题的有效解决方案,它能够帮助用户跨越不同数据库系统的壁垒,实现数据的平滑迁移,确保业务的连续性和数据的完整性。在选择和使用这类工具时,用户应全面考虑...
### 技术挑战与解决方案 在MySQL至Oracle的迁移过程中,技术团队可能会遇到多种挑战: - **数据类型不匹配**:通过创建映射表或使用中间数据格式(如XML)来转换不兼容的数据类型。 - **SQL语法差异**:利用专门的...
在IT行业中,数据库转换是一项常见的任务,特别是在不同的业务需求或技术栈变化时。...在实际操作中,根据"Readme-说明.htm"的指导是非常重要的,它能提供具体的操作流程和可能遇到的问题的解决方法。
MySQL和Oracle数据库安装文档 MySQL和Oracle都是流行的关系数据库管理系统,它们广泛应用于企业级应用中。对于初学者来说,安装和...同时,本文档还提供了一些常见的问题解决方案和数据库安全和性能优化的一些建议。
### Oracle与MySQL语法定义及函数的不同之处及解决方案 #### 数据迁移常见问题及处理方法 **问题一:** 扫描件表数据转移过程中出现数据量不一致。 **可能原因及解决办法:** 1. **扫描件本身损坏**:检查源...
6. **错误处理**:在迁移过程中,可能会遇到权限问题、数据不兼容等问题,ora2mysqcn.exe 应具备一定的错误处理机制,提供清晰的错误报告和解决方案。 7. **用户界面**:由于是面向中文用户,因此工具应该提供直观...
本篇文章将深入探讨如何从MySQL迁移到Oracle,以及在过程中可能遇到的问题和解决方案。 首先,MySQL是一款开源、免费的DBMS,以其易用性、灵活性和高效性能受到中小型企业的青睐。而Oracle则是一款企业级的、功能...
总之,Dbmover for MySQL to Oracle 提供了一个强大而全面的解决方案,帮助用户克服不同数据库系统之间的障碍,实现高效、安全的数据迁移。对于需要在MySQL和Oracle之间迁移数据的企业和个人来说,这是一个值得考虑...
本文档旨在详细介绍如何将MySQL数据库中的数据迁移到Oracle数据库中,包括具体的环境配置、迁移流程以及可能遇到的问题及解决方案。这对于需要进行数据库迁移的IT专业人士来说非常实用。 **1. 环境** - **MySQL...
总的来说,Oracle SQL Access MySQL数据库转换工具是解决多数据库平台之间数据迁移问题的有效解决方案。通过使用这样的工具,用户可以方便地在不同的数据库系统之间共享和转移数据,为业务流程的顺畅运行提供有力的...
Oracle到MySQL的数据迁移是一项常见的任务,特别是在企业进行数据库系统升级或更换时。Oracle是一款功能强大的关系型数据库管理系统,而MySQL则以其开源、免费和高效的特点受到广泛应用。"oracle2mysql"工具就是为了...
5. **文档和指导**:`安装必看.txt`文件很可能是工具的使用指南,包含安装步骤、注意事项以及可能遇到的问题解决方案,对于用户来说是至关重要的参考资料。 在使用这个工具时,需要注意的是,迁移过程可能会涉及到...
- 解决方案: 1. 使用MySQL命令行客户端连接MySQL。 2. 查询当前`max_allowed_packet`的值: ```sql SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'; ``` 3. 修改`max_allowed_packet`的大小,例如设置为...
总的来说,MySQL和Oracle都提供了有效的分页解决方案,但它们的实现方式有所不同。在设计数据库查询时,需要考虑到数据量、性能和数据库系统的特性,选择最适合的分页策略。对于大型数据集,优化分页查询是非常关键...
本文记录了一次在Oracle 10g 64位环境中,通过DBLink连接到MySQL 5.5的过程,并在面临RAC环境中的问题时找到了解决方案。 首先,Oracle 10g 64位版本的HSODBC(异构服务)可能出现问题,表现为HSODBC文件大小为0,...
然而,Oracle数据库则是企业级的数据库解决方案,以其强大的功能、高度的可扩展性和安全性著称。当业务发展需要更高级别的功能或对现有数据库进行升级时,可能会选择从MySQL迁移到Oracle。 转换工具的核心功能包括...
本文将深入探讨这个过程中的挑战和解决方案,重点关注数据迁移工具的选择及其优缺点。 首先,从Oracle到MySQL的迁移需要考虑的首要问题是选择合适的替代数据库。MySQL和PostgreSQL都是常见的选项,但MySQL因为其...