كيفية استخدام الاسم المستعار في مكان البند؟
-
27-09-2019 - |
سؤال
لدي هذا الإجراء:
PROCEDURE P_LOAD_EXPIRED_ACCOUNT
(
pDayDiff IN NUMBER,
ExpiredCur OUT MEGAGREEN_CUR
)
IS
BEGIN
OPEN ExpiredCur FOR
SELECT
ACCOUNT_NAME, SERVICE_TYPE,
CASE
WHEN SERVICE_TYPE = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3)
WHEN SERVICE_TYPE = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6)
WHEN SERVICE_TYPE = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12)
END
AS EXPIRED_DATE
FROM SUBSCRIBERS
WHERE (EXPIRED_DATE - CURRENT_DATE) < pDayDiff;
END;
لكن مطور SQL يولد هذا الخطأ:
خطأ (20،10): PL/SQL: ORA-00904: "Expired_date": معرف غير صالح
أعتقد أن PLSQL يسمح لي باستخدام الاسم المستعار في مكان البند ، لكن هل هناك شيء نسيته؟
شكرا مقدما.
المحلول
لا يمكنك الرجوع إلى الاسم المستعار للعمود في الفقرة Where - خياراتك هي:
- تكرار بيان الحالة في الفقرة حيث
استخدم مساعًا فرعيًا:
PROCEDURE P_LOAD_EXPIRED_ACCOUNT(pDayDiff NUMBER, ExpiredCur OUT MEGAGREEN_CUR) IS BEGIN OPEN ExpiredCur FOR SELECT x.account_name, x.service_type, x.expired_date FROM (SELECT s.account_name, s.service_type, CASE WHEN s.service_type = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3) WHEN s.service_type = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6) WHEN s.service_type = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12) END AS EXPIRED_DATE FROM SUBSCRIBERS s) x WHERE x.expired_date - CURRENT_DATE < pDayDiff; END;
Oracle 9I+
WITH summary AS ( SELECT s.account_name, s.service_type, CASE WHEN s.service_type = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3) WHEN s.service_type = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6) WHEN s.service_type = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12) END AS EXPIRED_DATE FROM SUBSCRIBERS s) SELECT x.account_name, x.service_type, x.expired_date FROM summary x WHERE x.expired_date - CURRENT_DATE < pDayDiff;
لا تنتمي إلى StackOverflow