我有以下(私有)PL / SQL函数(在PACKAGE中)以'YYYYMM'格式返回上个月:
FUNCTION GET_PREV_MONTH RETURN VARCHAR2 IS
BEGIN
RETURN TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM');
END GET_PREV_MONTH;
我需要在几个查询中比较记录是否来自上个月,所以我想让私函数在上个月返回。为什么我不能在我的其他SQL查询的WHERE子句中使用GET_PREV_MONTH()函数的返回值,如:
UPDATE mytable t SET t.col=1
WHERE TO_CHAR(t.created,'YYYYMM')=GET_PREV_MONTH();
Oracle说 PLS_00231:函数'GET_PREV_MONTH'可能不会在SQL中使用。
如果我创建它,这可行!
UPDATE mytable t SET t.col=1
WHERE TO_CHAR(t.created,'YYYYMM')=TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM');
答案 0 :(得分:1)
我想让私人功能在上个月回归。为什么我不能在我的其他SQL查询的
GET_PREV_MONTH()
子句中使用WHERE
函数的返回值
这是一个私人功能 - 您无法在包装外引用它。
如果要在SQL中使用它,请在包规范中声明它,使其公开。
这是这个包的私有功能!此函数用于同一包中的过程。它不在此包之外引用。
如果它不是公共函数, CAN NOT 可以在SQL上下文中使用;无论是从同一个包的内部还是外部调用SQL。