首先,先谢谢了
我自定义了一个函数,取当前单据号最大值后再加1,得到一个流水号,
用这个流水号作为新单据的单据号。--取最大值的函数
create or replace function getXSCKsn return varchar2 is
  Result varchar2(100);
begin
  select max(sn)+1 into Result from test1;
  
   return(Result);
end ;
/之后想用这个函数作为默认值,但是却出错了,如下:Connected to Oracle9i Release 9.2.0.4.0 
Connected as mjxcSQL> alter table TEST1 modify SN default getXSCKsn();alter table TEST1 modify SN default getXSCKsn()ORA-02262: 对列默认值表达式进行类型检查时, 出现 ORA-4044SQL>

解决方案 »

  1.   

    Default values can be defined using any literal, or almost any expression, including calls to the following:SYSDATESYS_CONTEXTUSERUSERENVUIDDefault values cannot include expressions that refer to a sequence, PL/SQL function, column, LEVEL, ROWNUM, or PRIOR. The datatype of a default literal or expression must match or be convertible to the column datatype.
      

  2.   

    那就插入数据时手动调用,或者可以用触发器
    create or replace trigger TGNAME
    before insert on TABNAME
    for each row
    begin
    :new.SN:= getXSCKsn();
    end;如果只是为了流水号自动增长,应该用序列来赋值
      

  3.   

    alter table TEST1 modify SN default getXSCKsn();
    这个肯定不行,DDL语句和DML语句不能混用