SQL查询的

时间:2017-05-04 09:25:44

标签: oracle plsql

我有以下(私有)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');

1 个答案:

答案 0 :(得分:1)

  

我想让私人功能在上个月回归。为什么我不能在我的其他SQL查询的GET_PREV_MONTH()子句中使用WHERE函数的返回值

这是一个私人功能 - 您无法在包装外引用它。

如果要在SQL中使用它,请在包规范中声明它,使其公开。

  

这是这个包的私有功能!此函数用于同一包中的过程。它不在此包之外引用。

如果它不是公共函数, CAN NOT 可以在SQL上下文中使用;无论是从同一个包的内部还是外部调用SQL。