create or replace trigger calcData
  after insert on 进帐明细  
  for each row
declare
begin
   pkgTiJiao.calcData(new.单价, new.日期);
end 进帐明细;CREATE OR REPLACE PACKAGE BODY pkgTiJiao IS
  PROCEDURE calcData(
                       日期    VARCHAR2,
                       单价,  NUMBER) IS
  begin
....
  end SetGisData;pkgTiJiao.calcData(new.单价, new.日期);这句如何写?

解决方案 »

  1.   

    --具体的还有看你的过程怎么写的
    --表名和字段名竟然用中文......
    create or replace trigger calcData
      before insert on 进帐明细  
      for each row
    begin
       pkgTiJiao.calcData(:new.单价,:new.日期);
    end 进帐明细;
      

  2.   

    create or replace trigger calcData
      before insert on 进帐明细  
      for each row
    begin
       pkgTiJiao.calcData(:new.单价,:new.日期);
    end 进帐明细;
      

  3.   


    create or replace trigger calcData before insert on 进帐明细  
      for each row
    declare
    begin
       pkgTiJiao.calcData(:new.单价, :new.日期);
    end 进帐明细;
    ---注意对于事后的触发器 不能修改:new.col 的值
    SQL> create table tt(id number)
      2  .
    SQL> /表已创建。SQL> ed
    已写入 file afiedt.buf  1  create or replace trigger tri_tt after insert on tt for each row
      2  begin
      3  :new.id:=2;
      4* end;
    SQL> /
    create or replace trigger tri_tt after insert on tt for each row
                              *
    第 1 行出现错误:
    ORA-04084: 无法更改此触发器类型的 NEW 值
    SQL> ed
    已写入 file afiedt.buf  1  create or replace trigger tri_tt before insert on tt for each row
      2  begin
      3  :new.id:=2;
      4* end;
    SQL> /触发器已创建SQL> insert into tt values(1)
      2  /已创建 1 行。SQL> commit
      2  /提交完成。SQL> select * from tt
      2  /        ID
    ----------
             2
      

  4.   

    function中取new和old的值是,要用‘:’符号
    pkgTiJiao.calcData(new.单价, new.日期);
    --->
    pkgTiJiao.calcData(:new.单价, :new.日期);