Tại sao SQL này truy vấn làm việc:Chức năng NEXT_DAY hoạt động khác trong SQL so với PL/SQL?
SELECT NEXT_DAY(SYSDATE, 7)
FROM DUAL;
NEXT_DAY(SYSDATE,7) ------------------- 01-APR-17 1 row selected.
... nhưng khối ẩn danh này của PL/SQL không hoạt động?
DECLARE
dteExpires DATE;
BEGIN
dteExpires := NEXT_DAY(SYSDATE, 7);
END;
Error at line 1 ORA-01846: not a valid day of the week ORA-06512: at line 4
Tôi không muốn cứng mã tham số thứ hai với tên tiếng Anh của một ngày cũ. NEXT_DAY(SYSDATE, 'SATURDAY')
hoặc NEXT_DAY(SYSDATE, 'SUNDAY')
vv
Hiện tại, tôi sẽ sử dụng công việc sau đây, nhưng tôi thực sự muốn biết tại sao NEXT_DAY()
hoạt động khác trong PL/SQL so với trong SQL.
DECLARE
dteExpires DATE;
BEGIN
-- 2017-01-01 = SUNDAY
dteExpires := NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('2017-01-01', 'YYYY-MM-DD'), 'DAY'));
END;
Đây là môi trường DEV của tôi:
SELECT *
FROM v$version;
BANNER -------------------------------------------------------------------------------- Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production PL/SQL Release 12.1.0.2.0 - Production CORE 12.1.0.2.0 Production TNS for 64-bit Windows: Version 12.1.0.2.0 - Production NLSRTL Version 12.1.0.2.0 - Production 5 rows selected.
Hành vi tương tự trong 11g XE. – Aleksej