我想在plsql中将月份和年份作为输入参数传递。如果我传递空值,我希望月份和年份是当前月份和当年的默认值。如何在pl sql的输入参数中传递当前月份和年份?
1
A
回答
1
A 日期应作为日期传递,而不是部分传递。您可以在需要时按要求提供元素。
传递SYSDATE为默认情况下参数:
p_date DATE default SYSDATE
然后EXTRACT元素:
例如,
SQL> SELECT SYSDATE ,
2 EXTRACT(YEAR FROM SYSDATE) AS curr_year ,
3 EXTRACT(MONTH FROM SYSDATE) AS curr_month ,
4 EXTRACT(DAY FROM SYSDATE) AS curr_day
5 FROM dual;
SYSDATE CURR_YEAR CURR_MONTH CURR_DAY
--------- ---------- ---------- ----------
03-NOV-15 2015 11 3
根据您的需求,你可以使用TO_CHAR,但是,结果的数据类型将是字符串。
例如,
SQL> SELECT SYSDATE ,
2 TO_CHAR(SYSDATE, 'YYYY') AS curr_year ,
3 TO_CHAR(SYSDATE, 'MM') AS curr_month ,
4 TO_CHAR(SYSDATE, 'DD') AS curr_day
5 FROM dual;
SYSDATE CURR_YEAR CURR_MONTH CURR_DAY
--------- --------- ---------- --------
03-NOV-15 2015 11 03
0
第一变体 -
CREATE OR REPLACE PROCEDURE test_poc(
year_num IN NUMBER DEFAULT to_number(to_char(sysdate, 'yyyy')),
month_num IN NUMBER DEFAULT to_number(to_char(sysdate, 'mm'))) IS
BEGIN
....
END;
二(较好,在输入参数的日期) -
CREATE OR REPLACE PROCEDURE test_poc(date_in IN DATE) IS
year_num NUMBER;
month_num NUMBER;
BEGIN
year_num := to_number(to_char(nvl(date_in, sysdate), 'yyyy'));
month_num := to_number(to_char(nvl(date_in, sysdate), 'mm'));
...
END;
0
您可以定义默认您的参数如其他答案中的建议。但是这些默认值只有在不传递任何参数时才会生效。赋予null作为参数值不会触发默认值。例如
create or replace
function TEST_FN(p_month in number default extract(MONTH from sysdate))
return varchar2
as
begin
return 'month='||nvl(p_month, -1);
end;
甲select TEST_FN() from dual;
将导致month=11
十一月,并选择给出select TEST_FN(null) from dual;
month=-1
。
如果您想用一些默认值替换null
使用nvl(...)
。
0
create or replace procedure p1(my_year int default null, my_month integer default null)
as
lyear int := nvl(my_year, to_char(sysdate,'yyyy'));
lmonth int := nvl(my_month, to_char(sysdate,'mm'));
begin
dbms_output.put_line(lyear);
dbms_output.put_line(lmonth);
end;
测试
begin
p1;
p1(2010);
p1(null,12);
p1(2009,10);
end;
输出
2015
11
2010
11
2015
12
2009
10
相关问题
- 1. 我必须从输入的月份/年份打印月份和年份到当前的月份和年份
- 2. T-SQL:从月份列中合并当前年份和月份
- 3. 将月份传递给pl/sql函数?
- 4. 在SQL中显示当前日期的年份和月份
- 5. 获取当前月份和当前年份的天数
- 6. 如何在JAVA中从MySQL获取当前年份和月份?
- 7. SQL:按月份和年份
- 8. SQL Server中参数的月份和年份的下拉列表
- 9. SQL代码如何获取当前年份和月份的数据?
- 10. 如何在java中获得当前年份和上一年的月份?
- 11. 行当前月份和当年剩余月份
- 12. 取输入月份和年份在SQL Server日期2005系列
- 13. excel如何显示当前的月份和年份与空间
- 14. 如何获得当前的月份和年份
- 15. 如何从sql日期和月份中获取月份等于使用Hibernate条件的传递参数月份
- 16. 参考月份和年份PostgreSQL中
- 17. 如何计算当前月份/年份的天数
- 18. 显示年份从当年开始到当月前一个月的月份
- 19. 如何根据当前月份和年份创建mysql表名
- 20. 的SQL Server DATEPART的年份和月份
- 21. 如何在unix中显示以前的月份和年份值
- 22. 如何从过去的月份到当月的月份和年份列表
- 23. 计算当前年份和当前月份的星期日数量?
- 24. MSSQL:从当前年份开始追溯到指定的年份和月份。
- 25. R Shiny DateRange仅输入月份年份
- 26. 如何将月份转换为java中的年份和月份
- 27. 如何在Angular JS中创建'<<当前月份 - 当前年份''?
- 28. 如何获得当前日期,月份,年份在斯卡拉
- 29. 在SQL Server中获取当前月份数量,1月份为1月份,12月份为12月份
- 30. 从SQL获取年份和月份
你可以用'to_char'功能。例如'to_char(sysdate,'yyyy')' - 这将是年。但它将是char值 – Tatiana
为什么你将月份和年份作为单独的参数传递,而不是日期?你可以通过本月的第一天(例如'trunc(sysdate,'mm')')而不是需要两个单独的参数。这有好处是已经有了验证,以确保你不会通过一个月的13等 – Boneist
我同意@Boneist。日期应该作为日期传递,而不是部分传递。您可以根据需要提取需求元素。 –