网站建设资讯

NEWS

网站建设资讯

oracle怎么更新表 oracle数据库更新

oracle如何用OEM如何更新表

单击这里的服务器,可对表空间,用户等进行管理

我们提供的服务有:成都网站设计、成都网站建设、外贸网站建设、微信公众号开发、网站优化、网站认证、涿鹿ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的涿鹿网站制作公司

使用OEM创建oracle表空间(一)

单击这里的表空间

使用OEM创建oracle表空间(一)

单击这里可以继续创建表空间

使用OEM创建oracle表空间(一)

这里输入要创建的表空间的名称

使用OEM创建oracle表空间(一)

输入表空间名称后,单击确定按钮

使用OEM创建oracle表空间(一)

这里提示一个错误,提示必须指定一个数据文件,所以我们在创建表空间时,必须添加一个数据文件给这个表空间使用

使用OEM创建oracle表空间(一)

单击这里的添加,开始添加一个数据文件

使用OEM创建oracle表空间(一)

oracle的表更新问题

先建立一个结构一模一样的表emp1,并为其插入部分数据

create table emp1

as

select * from emp where deptno = 20;

update掉emp1中的部分数据

update emp1

set sal = sal 100,

comm = nvl(comm,0) 50

然后我们试着使用emp1中数据来更新emp中sal 和 comm这两列数据。

我们可以这么写

Update emp

Set(sal,comm) = (select sal,comm. From emp1 where emp.empno = emp1.empno)

Where exists (select 1 from emp1 where emp1.empno = emp.empno)

请你尤其注意这里的where子句,你可以尝试不写where子句来执行以下这句话,你将会使得emp中的很多值变成空。

这是因为在oracle的update语句中如果不写where子句,oracle将会默认的把所有的值全部更新,即使你这里使用了子查询并且某在值并不能在子查询里找到,你就会想当然的以为,oracle或许将会跳过这些值吧,你错了,oracle将会把该行的值更新为空。

我们还还可以这么写:

update (select a.sal asal,b.sal bsal,a.comm acomm,

b.comm bcomm from emp a,emp1 b where a.empno = b.empno)

set asal = bsal,

acomm = bcomm;

这里的表是一个类视图。当然你执行时可能会遇到如下错误:

ERROR 位于第 2 行:

ORA-01779: 无法修改与非键值保存表对应的列

这是因为新建的表emp1还没有主键的缘故

下面增加一个主键

alter table emp1

add constraint pk_emp1 primary key (empno);

执行之后

在执行前面的语句就能成功。

这里我们总结一下:

在oracle中不存在update from结构,所以遇到需要从另外一个表来更新本表的值的问题的时候,有两种解决的办法:

一种是使用子查询,使用子查询时一定要注意where条件(一般后面接exists子句),除非两个表是一一对应的,否则where条件必不可少,遗漏掉where条件时可能会导致插入大量空值。

另外一种是类视图的更新方法,这也是oracle所独有的。先把对应的数据全部抽取出来,然后更新表一样更新数据,这里需要注意的是,必须保证表的数据唯一型。

C#.net 如何更新ORACLE表

C#利用update更新数据到oracle数据库:

第一步:打开oracle数据库

public static string connString = "";

public static OracleConnection conn = null;

//打开数据库连接

public static bool Open()

{

//从配置文件中获取连接字符串

//配置文件需要放在项目目录下的bin\Release中

connString = getXmlValue("connString");

conn = new OracleConnection(getXmlValue("connString"));

try

{

conn.Open();

Console.WriteLine("数据库连接成功");

return true;

}

catch (System.Exception ex)

{

Console.Write(ex.Message);

MessageBox.Show("未能连接到数据库");

return false;

}

第二步:执行更新方法:

public static int update(int ruleId, int equipmentId, String equipmentName, String propertyName, int ruleType, String ruleRequest, String ruleRequestOther, String ruleExplain)

{

String sql = "update Device_Attr t set t.BASEID = :equipmentId, t.BASENAME = :equipmentName,t.CA_NAME = :propertyName,t.CA_RULETYPE = :ruleType,t.CA_RULETEXT = :ruleRequest,t.CA_RULETEXT2 = :ruleRequestOther,t.CONTENT = :ruleExplain where t.CA_ID =:ruleId";

OracleCommand cmd = new OracleCommand(sql, conn);

OracleParameter param_1 = new OracleParameter(":equipmentId", equipmentId);

cmd.Parameters.Add(param_1);

OracleParameter param_2 = new OracleParameter(":equipmentName", equipmentName + "$");

cmd.Parameters.Add(param_2);

OracleParameter param_3 = new OracleParameter(":propertyName", propertyName);

cmd.Parameters.Add(param_3);

OracleParameter param_4 = new OracleParameter(":ruleType", ruleType);

cmd.Parameters.Add(param_4);

OracleParameter param_5 = new OracleParameter(":ruleRequest", ruleRequest);

cmd.Parameters.Add(param_5);

OracleParameter param_6 = new OracleParameter(":ruleRequestOther", ruleRequestOther);

cmd.Parameters.Add(param_6);

OracleParameter param_7 = new OracleParameter(":ruleExplain", ruleExplain);

cmd.Parameters.Add(param_7);

OracleParameter param_8 = new OracleParameter(":ruleId", ruleId);

cmd.Parameters.Add(param_8);

int result = cmd.ExecuteNonQuery();

return result;

}

oracle怎么更新分区表的数据

默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错——ORA-14402: 更新分区关键字列将导致分区的更改。但是可以通过打开表的row movement属性来允许对分区字段的update操作。

例:创建分区表test_part进行实验

create table TEST_PART

(

A1 NUMBERnot null,

A2 DATE not null,

A3 VARCHAR2(6) not null,

A4 DATE not null,

A5 NUMBER not null,

)

partition by range (A1)

(

partition P1 values less than (1000),

partition P2 values less than (2000),

partition P3 values less than (3000),

partition P4 values less than (4000),

partition P5 values less than (5000),

partition P6 values less than (MAXVALUE)

);

插入如下的数据

SQL select * from test_part;

A1 A2 A3 A4 A5

---------- ----------- ------ ----------- ----------

123 2006-06-30 123456 2006-06-30 123

456 2006-06-30 asdfgh 2006-06-30 456

1 2006-06-30 234123 2006-06-30 1

2 2006-06-30 234234 2006-06-30 2

1234 2006-06-30 456789 2006-06-30 1234

1111 2006-06-30 ewrqwe 2006-06-30 1111

2222 2006-06-30 fdafda 2006-06-30 2222

3333 2006-06-30 342342 2006-06-30 3333

5678 2006-06-30 qwerty 2006-06-30 5678

9 rows selected

分区P1、P2的数据分别为:

SQL select rowid,t.* from test_part partition(p1) t;

ROWID A1 A2 A3 A4 A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLoAAGAAAtsEAAB 456 2006-06-30 asdfgh 2006-06-30 456

AAAGLoAAGAAAtsEAAC 1 2006-06-30 234123 2006-06-30 1

AAAGLoAAGAAAtsEAAD 2 2006-06-30 234234 2006-06-30 2

AAAGLoAAGAAAtsEAAE 123 2006-06-30 123456 2006-06-30 123

SQL select rowid,t.* from test_part partition(p2) t;

ROWID A1 A2 A3 A4 A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC 1234 2006-06-30 456789 2006-06-30 1234

AAAGLwAAGAAA+8MAAD 1111 2006-06-30 ewrqwe 2006-06-30 1111

直接update提示错误

SQL update test_part set a1=1123 where a1=123;

update test_part set a1=1123 where a1=123

ORA-14402: 更新分区关键字列将导致分区的更改

打开row movement属性

SQL alter table test_part enable row movement;

Table altered

再次执行update操作

SQL update test_part set a1=1123 where a1=123;

1 row updated

执行是成功的并迁移到分区P2上了,且这时候rowid也发生了变化

SQL select rowid,t.* from test_part partition(p2) t;

ROWID A1 A2 A3 A4 A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC 1234 2006-06-30 456789 2006-06-30 1234

AAAGLwAAGAAA+8MAAD 1111 2006-06-30 ewrqwe 2006-06-30 1111

AAAGLwAAGAAA+8PAAB 1123 2006-06-30 123456 2006-06-30 123

SQL

enable row movement可以允许数据段的压缩、update分区字段的数据(跨分区的)

Oracle多表更新问题

可以用游标来执行更新,也可以用update语句更新。

但是oracle没有update from语句,可以用子查询来给源数据表的字段赋值,如果需要赋多个值的话,则用括号括起来,格式:

update table_name

set (field1, field2, ... ) = (select value1, value2, ... from source_table)

where ...

而where条件中则可以用exists测试是否要更新记录。更新语句大概这样:

update A s1

set a5 = (select b6 

from B s2 

where s2.b1 = s1.a1 and s2.b2 = s1.a2 and s2.b3 = s1.a3 and rownum = 1)

where exists (

select b6 

from B s2 

where s2.b1 = s1.a1 and s2.b2 = s1.a2 and s2.b3 = s1.a3 and rownum = 1

)

即赋值子句和where条件是类似的。


新闻标题:oracle怎么更新表 oracle数据库更新
分享网址:http://cdweb.net/article/hhpogi.html