科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道请问这个存储过程为什么不取默认值?

请问这个存储过程为什么不取默认值?

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

请问这个存储过程为什么不取默认值?

作者:csdn 来源:csdn 2009年12月22日

关键字: ORACLE 问答

  • 评论
  • 分享微博
  • 分享邮件

请问这个存储过程为什么不取默认值?

两个null参数都取不到默认值?系统时间和1000

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) ;

 

存储过程编译都没报错啊

SQL> exec addyuangong2(10,'tom','nan',23,null,null, 2,1) ;

PL/SQL procedure successfully completed

SQL> 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        1

10 rows selected

把存储过程的参数都显式的标为 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);

 

SQL codecreate 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',
........依次类推
)

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章