执行以下语句:
exec addass_proc('A0101','光大新支75290188000089156','开户银行','75290188000089156','现金流量项目',null);
/*
(corpcode in varchar2, ctaccountname in varchar2, 
 assbdname1 in varchar2, assvalue1 in varchar2,
 assbdname2 in varchar2, assvalue2 in varchar2)
*/
 
执行完提示:
      *
ERROR 位于第 1 行:
ORA-06550: 第 1 行, 第 7 列:
PLS-00905: 对象 SYS.ADDASS_PROC 无效
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
DOC>DOC>DOC>DOC>
是那里的错误哦,请大家多多指教!

解决方案 »

  1.   

    写一下语句:
    CREATE OR REPLACE PROCEDURE addass_proc 
    (corpcode in varchar2, ctaccountname in varchar2, 
     assbdname1 in varchar2, assvalue1 in varchar2,
     assbdname2 in varchar2, assvalue2 in varchar2)
    IS
      pk_assbd1 CHAR(20);
      pk_assbd2 CHAR(20);
      fid CHAR(20);
      pkglorgbook CHAR(20);
      pk_ctaccount CHAR(20);
      upd_stmt VARCHAR2(100) := 'update gl_accountlink set pk_ass =: 1 where pk_contrastaccount =: 2 and years = ''2008''';BEGIN
       select pk_bdinfo into pk_assbd1 from bd_bdinfo where bdname = assbdname1;
       select pk_bdinfo into pk_assbd2 from bd_bdinfo where bdname = assbdname2;
       if assvalue2 is not null
       then
          select distinct freevalueid into fid from gl_freevalue where (checktype = pk_assbd1 and valuename = assvalue1) or (checktype = pk_assbd2 and valuename = assvalue2) group by freevalueid having count(pk_freevalue) = 2;
    end if;
    if assvalue2 is null
    then
      select freevalueid into fid from gl_freevalue fvouter where freevalueid in (select distinct freevalueid from gl_freevalue where checktype = pk_assbd1 and valuename = assvalue1) group by fvouter.freevalueid having count(fvouter.pk_freevalue) = 1;
    end if;
    select pk_glorgbook into pkglorgbook from bd_glorgbook where bd_glorgbook.PK_GLORG in (select pk_glorg from bd_glorg where glorgcode = corpcode);
    select pk_contrastaccount into pk_ctaccount from gl_contrastaccount ca where ca.pk_corp = pkglorgbook and ca.contrastaccountname = ctaccountname; EXECUTE IMMEDIATE upd_stmt using fid,pk_ctaccount;

    EXCEPTION
        WHEN NO_DATA_FOUND THEN
             NULL;
     WHEN OTHERS THEN
           NULL;
    END addass_proc;/
      

  2.   

    直接test addass_proc,把参数填上,看看能不能执行;addass_proc和exec是否在一个用户下