扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
请问这个存储过程为什么不取默认值?
两个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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者