有三个表,钢管表,原料表,子管表原料表有字段:钢管号,钢管重量
钢管表有字段:钢管号,钢管长度
子管表有字段:子管号,对应钢管号,子管长度,子管重量
其中,原料表中的钢管号、钢管表中的钢管号与了管表中的对应钢管号相同。要求,在输入子管长度时,根据钢管重量、子管长度与对应钢管长度的比例,计算出子管的重量并写入数据库。我写了一个触发器来实现,如:CREATE OR REPLACE TRIGGER GMAN.GANGGUAN
BEFORE INSERT
ON GMAN.子管表
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   :NEW.子管重量 :=SELECT ROUND((:NEW.子管长度/PT.钢管长度)*ST.钢管重量,2) FROM 钢管表 PT,原料表 ST WHERE PT.钢管号=:NEW.对应钢管号 AND ST.钢管号=:NEW.对应钢管号;
END;出错提示:
4/21    PLS-00103: 出现符号 "SELECT"在需要下列之一时:
          ( - + case mod new not
          null <an identifier> <a double-quoted delimited-identifier>
          <a bind variable> avg count current exists max min prior sql
          stddev sum variance execute forall merge time timestamp
          interval date
          <a string literal with character set specification>
          <a number> <a single-quoted SQL string> pipe
          <一个带有字符集说明的可带引号的字符串文字>
          <一个可带引号的 SQL 字符串>
5/1     PLS-00103: 出现符号 "END"请高手帮忙,
或是提供解决“要求,在输入子管长度时,根据钢管重量、子管长度与对应钢管长度的比例,计算出子管的重量并写入数据库。”的方法也可。
拜托,拜托,急

解决方案 »

  1.   

     :NEW.子管重量 :=SELECT ROUND((:NEW.子管长度/PT.钢管长度)*ST.钢管重量,2) FROM 钢管表 PT,原料表 ST WHERE PT.钢管号=:NEW.对应钢管号 AND ST.钢管号=:NEW.对应钢管号;
    汗....是ORACLE的话
    用SELECT ROUND() INTO 变量 FROM 
    语法错误...
      

  2.   

    CREATE OR REPLACE TRIGGER tri_ACCIDENTCOST before insert on AccidentCost
    referencing new as newdata
    for each row
    DECLARE lr_applicationuserid NUMBER(15);
    lr_instid NUMBER(15);
    begin
     if Upper(user) != 'SPECTWOREPLENG' then
       select getapplicationuserid() into lr_applicationuserid FROM DUAL;
       :newdata.UserIDLastUpdated := lr_applicationuserid;
       select GetCurrentInstallation() into lr_instid FROM DUAL;
       :newdata.UpdateSite := lr_instid;
       :newdata.ExportMarker := 1;
       :newdata.LastUpdated := SYSDATE;
     end if;
    end;
    /
    例子
      

  3.   

    SELECT ROUND((:NEW.子管长度/PT.钢管长度)*ST.钢管重量,2) into :NEW.子管重量 FROM 钢管表 PT,原料表 ST WHERE PT.钢管号=:NEW.对应钢管号 AND ST.钢管号=:NEW.对应钢管号;
      

  4.   

    有没有类似sequence一类的,标志数据顺序的列?如果什么标志都没有,有点困难。flashback都没目标。
      

  5.   

    建议楼主读一读书,然后再实践,这样进步更快!!
    推荐一本书:精通Oracle 10g PL/SQL编程
      

  6.   


    CREATE OR REPLACE TRIGGER GMAN.GANGGUAN
    BEFORE INSERT
    ON GMAN.子管表
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    DECLARE
    PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
      SELECT ROUND((:NEW.子管长度/PT.钢管长度)*ST.钢管重量,2) into :NEW.子管重量 FROM 钢管表 PT,原料表 ST WHERE PT.钢管号=:NEW.对应钢管号 AND ST.钢管号=:NEW.对应钢管号;
    END;