oracle如何联合修改 oracle修改联合主键

oracle如何通过两个表关联,修改其中一表中某列的数据?

设定dept表deptno列为主键。

目前创新互联已为数千家的企业提供了网站建设、域名、雅安服务器托管网站运营、企业网站设计、田阳网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

alter

table

dept

add

constraint

pk_deptno

primary

key

(deptno);

在emp表deptno列上建立外键引用dept表deptno,指定外键类型为级联删除。

alter

table

emp

add

constraint

fk_deptno

foreign

key

(deptno)

references

dept(deptno)

on

delete

cascade;

这样删除dept表

只需:delete

from

dept

where

city='shanghai';

就可以自动删除对应emp表内容。

oracle12c数据库怎么同时修改两张表中相同字段的值

觉得你应该先弄清楚oracle的常规数据字典的结构,像9i里的常规数据字典中对象名称就有以user,all,dba为前缀的对象。

以user为例,我们查该对象下有些什么表,就应该执行下列的语句:

sqlselect

table_name

from

user_tables;

类似的,你可以进行替换。:)

oracle修改数据语法。 属于联表查询进行修改来的。

修改关联数据的方法如下。

有以下两张表:

根据test2表中的id和test1表中的id关联,修改test1表中name字段,语句如下:

update test1 a set a.name=(select b.name from test2 b where a.id=b.id) where a.id in (select id from test2);

更新后,test1表中结果:

Oracle里面有修改级联么?有的话怎么加?

DML触发器的创建

创建DML触发器需要CREATE TRIGGER系统权限。创建DML触发器的语法如下:

CREATE [OR REPLACE] TRIGGER 触发器名

{BEFORE|AFTER|INSTEAD OF} 触发事件1 [OR 触发事件2...]

ON 表名

WHEN 触发条件

[FOR EACH ROW]

DECLARE

声明部分

BEGIN

主体部分

END;

其中:

OR REPLACE:表示如果存在同名触发器,则覆盖原有同名触发器。

BEFORE、AFTER和INSTEAD OF:说明触发器的类型。

WHEN 触发条件:表示当该条件满足时,触发器才能执行。

触发事件:指INSERT、DELETE或UPDATE事件,事件可以并行出现,中间用OR连接。

对于UPDATE事件,还可以用以下形式表示对某些列的修改会引起触发器的动作:

UPDATE OF 列名1,列名2...

ON 表名:表示为哪一个表创建触发器。

FOR EACH ROW:表示触发器为行级触发器,省略则为语句级触发器。

触发器的创建者或具有DROP ANY TIRGGER系统权限的人才能删除触发器。删除触发器的语法如下:

DROP TIRGGER 触发器名

可以通过命令设置触发器的可用状态,使其暂时关闭或重新打开,即当触发器暂时不用时,可以将其置成无效状态,在使用时重新打开。该命令语法如下:

ALTER TRIGGER 触发器名 {DISABLE|ENABLE}

其中,DISABLE表示使触发器失效,ENABLE表示使触发器生效。

同存储过程类似,触发器可以用SHOW ERRORS 检查编译错误。 eg。CREATE OR REPLACE TRIGGER DML_LOG

BEFORE --触发时间为操作前

DELETE OR INSERT OR UPDATE -- 由三种事件触发

ON emp

FOR EACH ROW -- 行级触发器

BEGIN

IF INSERTING THEN

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','INSERT',:new.empno,SYSDATE,USER);

ELSIF DELETING THEN

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','DELETE',:old.empno,SYSDATE,USER);

ELSE

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','UPDATE',:new.empno,SYSDATE,USER);

END IF;

END; CREATE OR REPLACE TRIGGER log_sal

BEFORE

UPDATE OF sal

ON emp

FOR EACH ROW

WHEN (new.job='CLERK' AND (ABS(new.sal-old.sal)200))

DECLARE

v_no NUMBER;

BEGIN

SELECT COUNT(*) INTO v_no FROM logerr;

INSERT INTO logerr VALUES(v_no+1,'雇员'||:new.ename||'的原工资:'||:old.sal||'新工资:'||:new.sal);

END;

注意:在WHEN条件中引用new和old不需要在前面加“: ”。

CREATE TRIGGER CASCADE_UPDATE

AFTER

UPDATE OF deptno

ON DEPT

FOR EACH ROW

BEGIN

UPDATE EMP SET EMP.DEPTNO=:NEW.DEPTNO

WHERE EMP.DEPTNO=:OLD.DEPTNO;

END; CREATE [OR REPLACE] TRIGGER 触发器名

{BEFORE|AFTER }

{DDL事件1 [DDL事件2...]| 数据库事件1 [数据库事件2...]}

ON {DATABASE| [模式名.]SCHEMA }

[WHEN (条件)]

DECLARE

声明部分

BEGIN

主体部分

END;

oracle如何通过两个表关联,修改其两表中某列中的数据?

不管是update还是merge每次都是只能修改一站表,还没听说一次修改两张表的。

如果分别修改那就比较简单了(先确定B列是否唯一,如果不唯一,那么可能存在修改扩大的问题,所以可能还要修改语句),update a set a.d=2 where a.b=(select b from E where h=1)(这是a表的,b表的改法更容易)

如果一起修改,那么可能只能临时修改,也就是select的时候修改一下,这个一般没什么用。


网页名称:oracle如何联合修改 oracle修改联合主键
标题路径:http://myzitong.com/article/hghhdd.html