问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用oracle数据库中出现的问题

发布网友 发布时间:2022-04-08 00:40

我来回答

2个回答

懂视网 时间:2022-04-08 05:01

(syncCommit) { try { return context.SaveChanges(); } catch (DbEntityValidationException dbEx) { } }

 

4、使用PowerDesigner设计表后生成DDL语句,执行DDL语句后表、字段、关联键都可以正常生成,可是奇怪的问题就来了,你在plsql里面select * from table1表时,提示表或者视图不存在,可是你仔细看了好多遍,表明明存在呀。还出鬼了呢。。。

问题描述:我们来看生成的DDL语句

技术分享
/*==============================================================*/
/* DBMS name: ORACLE Version 11g    */
/* Created on: 2015/7/2 15:45:52    */
/*==============================================================*/


drop table "TB_Department" cascade constraints;

drop table "TB_Menu" cascade constraints;

drop table "TB_MenuRole" cascade constraints;

drop table "TB_Role" cascade constraints;

drop table "TB_UserRole" cascade constraints;

drop table "TB_Users" cascade constraints;

/*==============================================================*/
/* Table: "TB_Department"     */
/*==============================================================*/
create table "TB_Department" 
(
 "department_id" CHAR(10),
 "department_name" CHAR(10),
 "parent_id"  CHAR(10),
 "level"  CHAR(10),
 "status"  CHAR(10)
);

/*==============================================================*/
/* Table: "TB_Menu"      */
/*==============================================================*/
create table "TB_Menu" 
(
 "menu_id"  CHAR(10),
 "menu_name"  CHAR(10),
 "menu_url"  CHAR(10),
 "parent_id"  CHAR(10),
 "level"  CHAR(10),
 "sort_order"  CHAR(10),
 "status"  CHAR(10),
 "remark"  CHAR(10)
);

/*==============================================================*/
/* Table: "TB_MenuRole"      */
/*==============================================================*/
create table "TB_MenuRole" 
(
 "id"   CHAR(10),
 "role_id"  CHAR(10),
 "menu_id"  CHAR(10),
 "role_type"  CHAR(10),
 "button_id"  CHAR(10)
);

/*==============================================================*/
/* Table: "TB_Role"      */
/*==============================================================*/
create table "TB_Role" 
(
 "role_id"  CHAR(10),
 "role_name"  CHAR(10),
 "description" CHAR(10),
 "createtime"  CHAR(10),
 "modifytime"  CHAR(10)
);

/*==============================================================*/
/* Table: "TB_UserRole"      */
/*==============================================================*/
create table "TB_UserRole" 
(
 "id"   CHAR(10),
 "role_id"  CHAR(10),
 "user_id"  CHAR(10)
);

/*==============================================================*/
/* Table: "TB_Users"      */
/*==============================================================*/
create table "TB_Users" 
(
 "user_id"  INT,
 "user_name"  CHAR VARYING(0),
 "user_password" CHAR VARYING(0),
 "fullname"  CHAR(10),
 "department_id" CHAR(10),
 "status"  CHAR(10),
 "createtime"  DATE,
 "modifytime"  DATE,
 "remark"  CHAR(10)
);

comment on table "TB_Users" is
‘用户信息表‘;
View Code

解决方案:原来是"号在作怪,由于生成的表里面带了引号,所以当你用tb_users去查时,提示找不到该表。当你讲所有的引号去掉,再重新执行DDL,再去查询,就这样正常了。郁闷了好久吧!!如果你也是用过PowerDesigner生成过DDL语句,可能也遇到过问题。

 

5、用EF去连接oracle数据库时,最开始开发一直用的test用户,最近项目要上线了,在服务器上面安装好oracle,建好正式用户admin,可是奇怪的事情发生了。程序里面该改的配置文件,连接字符串都改了,数据表都创建正常,表空间什么的也都没问题,可是用admin连接的时候总是提示找不到对应的表或视图。这又是为什么呢?其实问题就在admin这个用户那里。

原因分析:因为之前开发一直用的test用户,拖EF表结构的时候也是test,这样在edmx文件中就生成了对应的Schema="Test"。而在连接数据库是,EF自动生成的Sql语句会带Test用户,所以导致找不到表。

<EntityContainer Name="ModelStoreContainer">
  <EntitySet Name="TB_DEPARTMENT" EntityType="Self.TB_DEPARTMENT" Schema="Test" store:Type="Tables" />
  <EntitySet Name="TB_MENU" EntityType="Self.TB_MENU" Schema="Test" store:Type="Tables" />
  <EntitySet Name="TB_MENUROLE" EntityType="Self.TB_MENUROLE" Schema="Test" store:Type="Tables" />
  <EntitySet Name="TB_ROLE" EntityType="Self.TB_ROLE" Schema="Test" store:Type="Tables" />
  <EntitySet Name="TB_USERROLE" EntityType="Self.TB_USERROLE" Schema="Test" store:Type="Tables" />
  <EntitySet Name="TB_USERS" EntityType="Self.TB_USERS" Schema="Test" store:Type="Tables" />

 

解决方案:重新生成表结构,或者手动改掉Schma的值。

 

6、查询时,有时在PL/SQL里面可以用中文模糊搜索,但是在程序调试中使用中文模糊搜索时总查询不到记录。

原因分析:由于PL/Sql里面进行过自动编码,所以支持中文检索,当程序用sql语句查询时如果没有设置编码的话可能查不到中文。

解决方案:需要在web.config配置文件加上 Unicode=true;
<property name="connection.connection_string">User ID=mall;Password=super123;Unicode=true;Data Source=EIPUAT</property>

 

7、oracle里面新建用户的时候,用户会有一个默认表空间,而此用户是无法访问到其他表空间下面的数据表的。这个时候需要修改用户的默认表空间或者表的所属表空间。

(1)修改表的表空间语句:

alter table TABLE_NAME move tablespace TABLESPACENAME 

 

(2)修改默认用户的表空间:

  alter user user_name default tablespace tablespace_name;

 

8、oracle创建自增序列。如果在sql server里面,只需要给主键设置自增长就行了。oracle可没有这玩意儿,怎么办?

解决方案:

(1) 创建自增序列,在PLSql里面的SQL 窗口中执行如下语句,创建自增序列TB_TRIAL_PROCESS_SQE

create sequence TB_TRIAL_PROCESS_SQE
minvalue 1 
maxvalue 99999999
increment by 1
start with 1; /*步长为1*/
/*创建触发器*/
DROP TRIGGER TB_TRIAL_PROCESS_TRI;
create or replace trigger TB_TRIAL_PROCESS_TRI
before insert on TB_TRIAL_PROCESS /*触发条件:当向表TB_TRIAL_PROCESS 执行插入操作时触发此触发器*/
for each row/*对每一行都检测是否触发*/
begin/*触发器开始*/ 
select TB_TRIAL_PROCESS_SQE.NEXTVAL into :new.trial_id from dual;  /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
end; /*退出sqlplus行编辑*/

 

(2) nhibernate的xml里面配置这个序列
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="E2E.Model.TB_TRIAL_PROCESS, E2E.Model" table="TB_TRIAL_PROCESS">
    <id name="TRIAL_ID" type="Decimal" unsaved-value="0">
      <column name="TRIAL_ID" sql-type="NUMBER" not-null="true" unique="true"/>
      <generator class="sequence">
        <param name="sequence">TB_TRIAL_PROCESS_SQE</param>
      </generator>
    </id>

 

9、oracle里面经常会遇到表被锁定的情况,有时需要手动解锁。

查看系统的锁语句:

select sess.sid, 
sess.serial#, 
lo.oracle_username, 
lo.os_user_name, 
ao.object_name, 
lo.locked_mode 
from v$locked_object lo, 
dba_objects ao, 
v$session sess 
where ao.object_id = lo.object_id and lo.session_id = sess.sid;

杀掉锁表进程语句:(上面的语句会得到两个字段SID和serial#)

alter system kill session ‘SID,serial#‘;/*将上面语句查询到的SID和serial#复制到本语句的相应位置执行即可*/

 

10、C#程序里面同时执行多条SQL语句,于此同时又不方便使用存储过程或数据库事务。一般是增删改语句。

解决方案:如果你将多条SQL语句用分号隔开放在plsql中执行是可以得到结果的。但是在程序里面直接传多条SQL语句时则会提示错误。这个时候需要在这多条SQL语句的前后分别加上begin和end。这样就能解决问题。记得原来在SQL Server里面直接这样传多条sql语句是可以的。但在oracle里面需要这么处理下。

 

11、未完待续......

 

以上是本人在使用oracle开发过程中经常遇到的问题的一些小结。目前为止先整理这么多,后续会将这个序列继续下去。

 

Oracle系列——开发中奇葩问题你遇到几个(一)

标签:

热心网友 时间:2022-04-08 02:09

Access Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无效页面错误),虽然说法不一样,但本质上总是由同一种错误引起的。Access Violation常常在计算机用户运行的程序试图存取未被指定使用的存储区时遇到。
Access violation at address <十六进制值>
in mole <应用程序名>
Read of address <十六进制值>

遇到Access Violation的一些解决方法可以看这里面

参考资料:http://www.wesoho.com/showlog.asp?log_id=1403&cat_id=28

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 苏轼的《月初》全文是什么? 有什么牌子的淡奶油可以代替安佳淡奶油? 有什么软件可以自动接电话!自动回答问题? 智能接听助理哪里有下载的,能接电话那种? 多美鲜稀奶油和安佳奶油哪个比较好 智能接听是怎么回事啊? 迅拨智能电话可以让接点方看不到虚拟运营商吗 用哪个智能语音助手功能代接听电话比较靠谱呢? OPPO手机智能接听怎么使用 女朋友老是删聊天记录,还能处下去么 女朋友为什么要拿我手机删她的聊天记录 为什么女友会把和别人的聊天记录删了? oracle数据库遇到的问题 怎么提高初中数学基础知识 如何才能把数学基础知识掌握好 怎样学习数学??? 腾讯QQ有专门的企业QQ账号吗?怎么注册? 什么是企业QQ?如何申请企业qq? 全棉时代的洗脸巾哪款比较好用? 想给男朋友买洗脸巾,选择哪个品牌的好? 月初,是什么意思 一月初是几号? 古时候月初月末分别叫什么? 月初是什么时候? 如何提高视频帧数 月初的月亮叫 狩猎为什么要在月初和月尾 这个月月初哪个时候? windows计划任务自动执行java程序怎么做 java的定时任务,执行的原理是什么?或者说为啥它就能知道在那个时间点去执行任务呢?哎,很是想不通. 编一个java小程序,通过系统的计划任务定时执行。获得当前时间然后弹出提 ... 用java做了一个简单的定时任务工程,不知道如何让它在服务器上运行起来?应该怎么做??? 用java实现定时任务要稳定的。谁帮实现一下。 比如: 每天早上8点输出一句话。(天天早上8点都输出). 计划任务批处理:15分钟关闭程序,如程序不在运行,不执行计划 java如何实现多个服务器同时运行一个任务计划,各个服务器之间的任务计划互斥,并能实时监控任务计划状态 在java中timertask是什么类 JAVA定时执行任务,每天定时几点钟执行任务 在Java中如何设置一个定时任务,在每天的一个时间点自动执行一个特定的... java如何实现在下个月的某一天自动获取某数据 弹钢琴手指怎么放?