我想在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。日期應該作爲日期傳遞,而不是部分傳遞。您可以根據需要提取需求元素。 –