用触发器
子查询最好不要用在UPDATE等DDL语句中

解决方案 »

  1.   

    UPDATE A
    SET A.name  = (
        SELECT B.NAME
        FROM B
        WHERE A.a_id = B.a_id AND B.b_id = '单号');
    这样就行了吧
      

  2.   

    对用触发器比较好。
    create trigger name_tri 
    before update on b
    for each row
    as
    begin
    update a set name=:new.name where a_id = :new.a_id AND :new.b_id = '单号';
    end;
    /
      

  3.   

    CREATE TABLE A
    (
      A_ID VARCHAR2(10) CONSTRAINT PK_A_ID PRIMARY KEY,
      FLD1 INT,
      FLD2 INT,
      FLD3 INT
    );
    CREATE TABLE B
    (
      B_ID VARCHAR2(10) CONSTRAINT PK_B_ID PRIMARY KEY,
      A_ID VARCHAR2(10) CONSTRAINT FK_A_ID REFERENCES A(A_ID),
      FLD1 INT,
      FLD2 INT,
      FLD3 INT,
      FLD4 INT
    );
    在ORACLE中有没有像SQL SERVER这样的更新语句的语法?
    UPDATE A
    SET
      FLD1 = B.FLD1,
      FLD2 = B.FLD2,
      FLD3 = B.FLD3 + B.FLD4
    FROM B
    WHERE A.A_ID = B.A_ID AND B.B_ID = '单号'
    好象在ORACLE中的DELETE和UPDATE语句不支持FROM子句。
      

  4.   

    你的语句少作改动可以快一点:
    UPDATE A SET A.name = (SELECT B.name FROM B WHERE B.a_id = A.a_id AND B.b_id = '单号')
    WHERE EXISTS (SELECT 1 FROM B WHERE B.a_id = A.a_id AND B.b_id = '单号')
      

  5.   

    不是吧,要用触发器?
    ORACLE不至于是这样的吧?!
    痛苦啊!!!!!!!!
      

  6.   

    SQL SERVER:
    UPDATE A
    SET
      FLD1 = B.FLD1,
      FLD2 = B.FLD2,
      FLD3 = B.FLD3 + B.FLD4
    FROM B
    WHERE A.A_ID = B.A_ID AND B.B_ID = '单号'ORACLE:
    UPDATE A
    SET
      FLD1 = (SELECT FLD1 FROM B WHERE A.A_ID = B.A_ID AND B.B_ID = '单号'),
      FLD2 = (SELECT FLD2 FROM B WHERE A.A_ID = B.A_ID AND B.B_ID = '单号'),
      FLD3 = (SELECT FLD3 FROM B WHERE A.A_ID = B.A_ID AND B.B_ID = '单号')
    WHERE EXISTS(SELECT 1 FROM B WHERE A.A_ID = B.A_ID AND B.B_ID = '单号')
    ORACLE的这种语法恐怖啊!
    不得不重复对条件进行判断了!
      

  7.   

    没有简单方法吗?
    我想ORACLE为什么这么简单的更新语句会搞得如此复杂,希望高手能说说ORACLE这么做的原因。
      

  8.   

    试试更新视图UPDATE (
      SELECT
        A.FLD1,
        B.FLD2
      FROM A, B
      WHERE 
      )
    SET A.FLD1 = B.FLD2;
      

  9.   

    看看这个
    http://expert.csdn.net/Expert/topic/1712/1712439.xml?temp=.392193
    是看了搂主的贴子有感而发的
      

  10.   

    如果是定期实时更新,用触发器;
    如果不需要定期实时更新,直接用UPDATE语句,
      

  11.   

    我发的几个问题总是无法得到正确的答案,郁闷!ORACLE论坛无能人了吗?!
    以上说使用触发器者是没有实际开发经验的吧,这样的语句写触发器实在不可行啊!!!!
      

  12.   

    UPDATE A
    SET A.name  = (
        SELECT B.NAME
        FROM B
        WHERE A.a_id = B.a_id AND B.b_id = '单号');
    where A.a_id in (select b_id from B where b_id = '单号')
      

  13.   

    我觉得oracle的sqlplus实在是不强,sql server的很多利用率很高的sql都不能用.(火靠!)如果在update等语句里写上子查询的话,执行效率非常底下,而且常常是更新不上任何数据.我用上述方法更新的表格 ,更新10000条记录的话每次都要30多分钟,给用户转换和更新数据
    太慢.根本就是难以忍受.各位如有最好的解决方法或想讨论的,please email to me : [email protected]