USERID是一个序列
SELECT LPAD(USERID.NEXTVAL,4,'0') INTO :NEW.NUM FROM DUAL;
上面这条语句的含义是什么?
此外,我还想编写一个触发器,完成这样的功能:当删除一条记录之后,就触发同时删除多个表,其中这些表中中都有一项与删除的记录对应(值相同)。最好能写个例子。
其中,要删除的表为table1,与之关联的两个表为table2与table3。其中他们关联的项为tableindex。

解决方案 »

  1.   

    今天有时间,给你解释一下:
    1、SELECT LPAD(USERID.NEXTVAL,4,'0') INTO :NEW.NUM FROM DUAL;
      其中的userid一定是一个sequence,所以呢USERID.NEXTVAL是取该序列的下一个值。
      lpad的作用是在生成的在左面补上字符'0'使其达到四位
      整个句子就是把生成的值赋值给变量NEW.
    2、给你一个例子:
    CREATE TRIGGER scott.emp_permit_changes
      AFTER
      DELETE ON table1
      FOR EACH ROW
    BEGIN
      delete from table2 where id=:new.id;
      delete from table3 where id=:new.id;
    END;  
      

  2.   

    补充:
    未看到关联项是tableindex,这样,把上面的new.id换成new.tableindex就可以了。
      

  3.   

    那么NEW这个变量又代表什么意思呢,可否再解释一下,谢谢了。
      

  4.   

    噢,我说错了,些中的new应为old,即把所有的new替换为old
    说明:
    old,new其实相当于一个行变量,即它代表一行,所以呢old应为原来的一行,而new是新的一行。
    在delete中只有old的概念,在update中有old和new的概念,在insert中只有new的概念。
    在delete中old代表被删除的一行,insert事件中new代表新增的一行。
      

  5.   

    对了,还有一个地方不明白就是 FROM DUAL,指的是什么,平时应该如何写。谢谢!
      

  6.   

    在oracle中一个select 语句必需有的结构就是select ... from ...;所认呢其实 LPAD(USERID.NEXTVAL,4,'0')这一句并不属于哪一个表,它只是一个计算式,为了这个select 结构,oracle设计了dual,它是一个空表,什么都没有。
      

  7.   

    版主已经说得很全了。再给一个dual的例子:
    select sysdate from dual;
    desc dual;