两个null参数都取不到默认值?系统时间和1000create or replace procedure addyuangong2
(sid in number,
sname in varchar2,
ssex in varchar,
sage in number,
shiredate date default sysdate,
ssalary in number default 1000,
sleaderid number,
sgroupid number
)is
o_ssalary yuangong.salary%type;
procedure check_sal(sal in out number)is
begin
if sal<1000 then 
   sal:=1000;
end if;
end check_sal;
begin
o_ssalary:=ssalary;
check_sal(o_ssalary);
insert into yuangong(id ,name,sex ,age,hire_date,salary,leader_id,group_id) values(sid,sname,ssex,sage,shiredate,ssalary,sleaderid,sgroupid);
end addyuangong2;
exec addyuangong2(10,'tom','nan',23,null,null, 2,1) ;

解决方案 »

  1.   

    存储过程编译都没报错啊SQL> exec addyuangong2(10,'tom','nan',23,null,null, 2,1) ;PL/SQL procedure successfully completedSQL> select * from yuangong;  ID NAME     SEX          AGE HIRE_DATE     SALARY LEADER_ID GROUP_ID
    ---- -------- ---------- ----- ----------- -------- --------- --------
       2 ss       HE是个男的  18.0 2009-6-22    1500.00                  2
       1 yz       男          18.0 2009-6-22    1500.00         2        2
       3 ff       男          16.0 2009-6-21    1500.00         2        3
       4 s2       女          64.0 2009-2-4     1234.00         2        3
       5 s3       女          14.0 2009-2-4     1234.00         2        3
       6 fdfds    男          15.0 2009-12-12   4321.00         2        3
       7 te       女          15.0 2009-12-12   4321.00         1        3
       8 te       女          15.0 2009-12-12   4321.00         1        3
       9 df       x           13.0 2005-2-13    1233.00         2        1
      10 tom      nan         23.0                              2        110 rows selected
      

  2.   

    把存储过程的参数都显式的标为 in 
    shiredate in date default sysdate, 
    sleaderid in number,
    sgroupid in number 
    insert into yuangong(id ,name,sex ,age,hire_date,salary,leader_id,group_id) values(sid,sname,ssex,sage,shiredate,o_ssalary,sleaderid,sgroupid);
      

  3.   


    插入数据后没有commit,可能是这个原因,你可以试试!
      

  4.   

    create or replace procedure addyuangong2 
    (sid in number, 
    sname in varchar2, 
    ssex in varchar, 
    sage in number, 
    shiredate date default sysdate, 
    ssalary in number default 1000, 
    sleaderid number, 
    sgroupid number 
    )is 
    o_ssalary yuangong.salary%type; 
    procedure check_sal(sal in out number)is 
    begin 
    if sal <1000 then 
      sal:=1000; 
    end if; 
    end check_sal; 
    begin 
    o_ssalary:=ssalary; 
    check_sal(o_ssalary); 
    insert into yuangong(id ,name,sex ,age,hire_date,salary,leader_id,group_id) values(sid,sname,ssex,sage,shiredate,ssalary,sleaderid,sgroupid); 
    end addyuangong2; 
    exec addyuangong2(10,'tom','nan',23,null,null, 2,1) ;
    调用过程时,对其参数的输入有3中方式:1.名称表示法,2.位置表示法,3.混合表示法。
    1、如果你想用某个参数字段的默认值,那么你应该把要使用默认值的参数都定义在过程的最后。
    2、可以用名称表示法,对过程进行参数的赋值。
    如:addyuangong2 
    (sid=>'10', 
    sname=>'tom', 
    ........依次类推 
    )