Oracle 如何在pl sql的输入参数中传递当前月份和年份?
我试图在plsql中传递月份和年份作为输入参数。如果传递空值,我希望月份和年份成为当前月份和当前年份的默认值。A日期应作为日期传递,而不是部分传递。您可以在需要时提取需求元素 将SYSDATE作为参数中的默认值传递:Oracle 如何在pl sql的输入参数中传递当前月份和年份?,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我试图在plsql中传递月份和年份作为输入参数。如果传递空值,我希望月份和年份成为当前月份和当前年份的默认值。A日期应作为日期传递,而不是部分传递。您可以在需要时提取需求元素 将SYSDATE作为参数中的默认值传递: p_date DATE default SYSDATE 然后提取元素: 比如说, SQL> SELECT SYSDATE , 2 EXTRACT(YEAR FROM SYSDATE) AS curr_year , 3 EXTRACT(MONTH FRO
p_date DATE default SYSDATE
然后提取元素:
比如说,
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
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
根据您的要求,您可以使用来_CHAR,但是,结果的数据类型将是string
比如说,
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
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
第一种变体-
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;
第二个(更好,输入参数中有日期)——
您可以按照其他答案中的建议为参数定义默认值。但这些默认值只有在您不将任何内容作为参数传递时才会生效。将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;
A从dual中选择TEST_FN()代码>将导致11月的month=11
,并从dual中选择select TEST_FN(null)代码>给出月份=-1
如果要用一些默认值替换null
,请使用nvl(…)
试验
输出
2015
11
2010
11
2015
12
2009
10
您可以使用来创建char
函数。e、 g.到字符(sysdate,'yyyy')
-这将是一年。但这很重要,为什么要将月份和年份作为单独的参数传递,而不是日期?您可以只通过当月的第一个参数(例如,trunc(sysdate,'mm')
),而不需要两个单独的参数。这样做的好处是已经进行了验证,以确保您不会超过13个月,etcI同意@Boneist。日期应作为日期传递,而不是部分传递。您可以根据需要提取需求元素。
2015
11
2010
11
2015
12
2009
10