الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

مساعدة فى انشاء Procedure

Featured Replies

بتاريخ:

سلام عليكم
مساعدة فى انشاء  Procedure
استفسار
أنا عملت جملة كويرى علشان تطلع القيمة بالشهور كلالتالى
وحاليا محتاج اعمل بروسيدجر يكون فيه برامتر أدخله قيمة التاريخ من كذا الى كذا

دى جملة الكويرى

 

 

 
SELECT SUM(NVL(A.PROCESSED_WTR,0)) PROCESSED_WTR  ,
TO_CHAR(A.DATA_DATE_G , 'MM/RRRR')


FROM WPD_MAIN_STATION_READ A, WPD_MAIN_STATION B 
WHERE A.COMPANY_NO(+) = B.COMPANY_NO 
AND A.MAIN_STATION_NO(+) = B.MAIN_STATION_NO 
AND A.DATA_DATE_G(+) BETWEEN  TO_DATE('01/01/2014', 'DD/MM/RRRR') AND TO_DATE('01/09/2014' , 'DD/MM/RRRR')
AND A.COMPANY_NO(+) =  1
AND B.ACTIVE_FLAG = 1 
AND B.D_R_PRINT_FLAG = 1 
GROUP BY TO_CHAR(A.DATA_DATE_G , 'MM/RRRR');
وده صورة من نتيجة الكويرى

مكن المساعدة

post-77534-0-97758300-1409642603_thumb.jpg

تم تعديل بواسطة Ahmad.Hasan

بتاريخ:

السلام عليكم

جرب التالي:

 

CREATE OR REPLACE PROCEDURE xx_procedure (p_from_date CHAR, p_to_date CHAR)
AS
   vn_processed_wtr   NUMBER;
BEGIN
   SELECT SUM (NVL (a.processed_wtr, 0)) processed_wtr
     INTO vn_processed_wtr
     FROM wpd_main_station_read a, wpd_main_station b
    WHERE a.company_no(+) = b.company_no
      AND a.main_station_no(+) = b.main_station_no
      AND a.data_date_g(+) BETWEEN TO_DATE (p_from_date, 'DD/MM/RRRR')
                               AND TO_DATE (p_to_date, 'DD/MM/RRRR')
      AND a.company_no(+) = 1
      AND b.active_flag = 1
      AND b.d_r_print_flag = 1;
END;
/
بتاريخ:
  • كاتب الموضوع

أنا جربت اعمله

 

 

Execute

 

ظهر كده

post-77534-0-06123300-1409648393_thumb.jpg

بتاريخ:
  • كاتب الموضوع

الجدولين

 

post-77534-0-99755500-1409649361_thumb.jpg

post-77534-0-24791000-1409649376_thumb.jpg

بتاريخ:
  • كاتب الموضوع

1-Table  WPD_MAIN_STATION_READ

 

CREATE TABLE WPD_MAIN_STATION_READ
(
  COMPANY_NO       NUMBER(2),
  MAIN_STATION_NO  NUMBER(3),
  DATA_DATE_G      DATE,
  DATA_DATE_H      VARCHAR2(10 BYTE),
  NON_USEFUL       NUMBER(3),
  UNDR_MAINT_WELL  NUMBER(3),
  UNDR_MAINT_EQUP  NUMBER(3),
  WORKING_WELL     NUMBER(3),
  TOTAL_WELLS      NUMBER(3),
  COOLED_WTR       NUMBER(12,2),
  MIXED_WTR        NUMBER(12,2),
  PRODUCED_WTR     NUMBER(12,2),
  EXILED_WTR       NUMBER(12,2),
  PROCESSED_WTR    NUMBER(12,2),
  WATER_IN_TANK    NUMBER(12,2),
  RO_PROD_WTR      NUMBER(12,2),
  RO_EXILED_WTR    NUMBER(12,2),
  RAW_WTR          NUMBER(12,2)
)
TABLESPACE USERS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          6M
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;
 
 
CREATE UNIQUE INDEX MAIN_STATION_READ_PK ON WPD_MAIN_STATION_READ
(COMPANY_NO, MAIN_STATION_NO, DATA_DATE_G)
LOGGING
TABLESPACE USERS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          3M
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
 
 
CREATE PUBLIC SYNONYM WPD_MAIN_STATION_READ FOR WPD_MAIN_STATION_READ;
 
 
ALTER TABLE WPD_MAIN_STATION_READ ADD (
  CONSTRAINT MAIN_STATION_READ_PK
 PRIMARY KEY
 (COMPANY_NO, MAIN_STATION_NO, DATA_DATE_G)
    USING INDEX 
    TABLESPACE USERS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          3M
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
               ));
 
ALTER TABLE WPD_MAIN_STATION_READ ADD (
  CONSTRAINT MAIN_STATION_READ_FK2 
 FOREIGN KEY (COMPANY_NO, MAIN_STATION_NO) 
 REFERENCES WPD_MAIN_STATION (COMPANY_NO,MAIN_STATION_NO),
  CONSTRAINT MAIN_STATION_READ_FK1 
 FOREIGN KEY (COMPANY_NO) 
 REFERENCES STP.STP_COMPANY (COMPANY_NO));
 
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON WPD_MAIN_STATION_READ TO PUBLIC;
 
 
-----------------------------------
 
2- Table WPD_MAIN_STATION
 
CREATE TABLE WPD_MAIN_STATION
(
  COMPANY_NO             NUMBER(2),
  MAIN_STATION_NO        NUMBER(3),
  MAIN_STATION_NAME_ARB  VARCHAR2(100 BYTE),
  MAIN_STATION_NAME_ENG  VARCHAR2(100 BYTE),
  ACTIVE_FLAG            NUMBER(1),
  D_R_PRINT_FLAG         NUMBER(1),
  TOTAL_WELLS            NUMBER(3),
  TO_HPT_FLAG            NUMBER(1),
  COMM_WELLS_FLAG        NUMBER(1),
  WELL_FIELD_FLAG        NUMBER(1),
  COST_STATION_NAME_ARB  VARCHAR2(100 BYTE),
  COST_STATION_NAME_ENG  VARCHAR2(100 BYTE),
  RIYADH_STATION_FLAG    NUMBER(1),
  COOLED_WATER_RATE      NUMBER(5,2),
  PRECIP_RATE            NUMBER(5,2),
  PRECIP_LOSE_RATE       NUMBER(5,2),
  INDEX_NO               NUMBER(3)
)
TABLESPACE USERS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;
 
 
CREATE UNIQUE INDEX MAIN_STATION_PK ON WPD_MAIN_STATION
(COMPANY_NO, MAIN_STATION_NO)
LOGGING
TABLESPACE USERS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
 
 
CREATE PUBLIC SYNONYM WPD_MAIN_STATION FOR WPD_MAIN_STATION;
 
 
ALTER TABLE WPD_MAIN_STATION ADD (
  CONSTRAINT MAIN_STATION_PK
 PRIMARY KEY
 (COMPANY_NO, MAIN_STATION_NO)
    USING INDEX 
    TABLESPACE USERS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
               ));
 
ALTER TABLE WPD_MAIN_STATION ADD (
  CONSTRAINT MAIN_STATION_FK1 
 FOREIGN KEY (COMPANY_NO) 
 REFERENCES STP.STP_COMPANY (COMPANY_NO));
 
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON WPD_MAIN_STATION TO PUBLIC;
 
بتاريخ:

السلام عليكم اخي الكريم
كما وضح لك اخي Ahmed.Hasan طريقة عمل البروسيجور وستحتاج عمل 2 out parameter لاخراج القيمتين من جملة السيلكيت
 

CREATE OR REPLACE PROCEDURE get_processed_wtr(i_date_from      VARCHAR2,
                                              i_date_to        VARCHAR2,
                                              o_processed_wtr  OUT NUMBER,
                                              o_processed_date OUT VARCHAR2) IS
BEGIN
  SELECT SUM(nvl(a.processed_wtr, 0)) processed_wtr,
         to_char(a.data_date_g, 'MM/RRRR')
  INTO   o_processed_wtr,
         o_processed_date
  FROM   wpd_main_station_read a,
         wpd_main_station      b
  WHERE  a.company_no(+) = b.company_no
  AND    a.main_station_no(+) = b.main_station_no
  AND    a.data_date_g(+) BETWEEN to_date(i_date_from, 'DD/MM/RRRR') AND
         to_date(i_date_to, 'DD/MM/RRRR')
  AND    a.company_no(+) = 1
  AND    b.active_flag = 1
  AND    b.d_r_print_flag = 1
  GROUP  BY to_char(a.data_date_g, 'MM/RRRR');
EXCEPTION
  WHEN OTHERS THEN
    o_processed_wtr  := '';
    o_processed_date := '';
END get_processed_wtr;

بتاريخ:

 

السلام عليكم اخي الكريم

كما وضح لك اخي Ahmed.Hasan طريقة عمل البروسيجور وستحتاج عمل 2 out parameter لاخراج القيمتين من جملة السيلكيت

 

CREATE OR REPLACE PROCEDURE get_processed_wtr(i_date_from      VARCHAR2,
                                              i_date_to        VARCHAR2,
                                              o_processed_wtr  OUT NUMBER,
                                              o_processed_date OUT VARCHAR2) IS
BEGIN
  SELECT SUM(nvl(a.processed_wtr, 0)) processed_wtr,
         to_char(a.data_date_g, 'MM/RRRR')
  INTO   o_processed_wtr,
         o_processed_date
  FROM   wpd_main_station_read a,
         wpd_main_station      b
  WHERE  a.company_no(+) = b.company_no
  AND    a.main_station_no(+) = b.main_station_no
  AND    a.data_date_g(+) BETWEEN to_date(i_date_from, 'DD/MM/RRRR') AND
         to_date(i_date_to, 'DD/MM/RRRR')
  AND    a.company_no(+) = 1
  AND    b.active_flag = 1
  AND    b.d_r_print_flag = 1
  GROUP  BY to_char(a.data_date_g, 'MM/RRRR');
EXCEPTION
  WHEN OTHERS THEN
    o_processed_wtr  := '';
    o_processed_date := '';
END get_processed_wtr;

 

السلام عليكم

ولكن بهذه الطريقة سيتم عمل Grouping لذلك يجب ازاله data_date_g من السيليكت وازاله الـ Group By حتى يتم تجميع القيم اعتمادا على التاريخ من إلى.

 

ويعطيك العافية أخي محمد.

بتاريخ:
  • كاتب الموضوع

 

 

السلام عليكم اخي الكريم

كما وضح لك اخي Ahmed.Hasan طريقة عمل البروسيجور وستحتاج عمل 2 out parameter لاخراج القيمتين من جملة السيلكيت

 

CREATE OR REPLACE PROCEDURE get_processed_wtr(i_date_from      VARCHAR2,
                                              i_date_to        VARCHAR2,
                                              o_processed_wtr  OUT NUMBER,
                                              o_processed_date OUT VARCHAR2) IS
BEGIN
  SELECT SUM(nvl(a.processed_wtr, 0)) processed_wtr,
         to_char(a.data_date_g, 'MM/RRRR')
  INTO   o_processed_wtr,
         o_processed_date
  FROM   wpd_main_station_read a,
         wpd_main_station      b
  WHERE  a.company_no(+) = b.company_no
  AND    a.main_station_no(+) = b.main_station_no
  AND    a.data_date_g(+) BETWEEN to_date(i_date_from, 'DD/MM/RRRR') AND
         to_date(i_date_to, 'DD/MM/RRRR')
  AND    a.company_no(+) = 1
  AND    b.active_flag = 1
  AND    b.d_r_print_flag = 1
  GROUP  BY to_char(a.data_date_g, 'MM/RRRR');
EXCEPTION
  WHEN OTHERS THEN
    o_processed_wtr  := '';
    o_processed_date := '';
END get_processed_wtr;

 

السلام عليكم

ولكن بهذه الطريقة سيتم عمل Grouping لذلك يجب ازاله data_date_g من السيليكت وازاله الـ Group By حتى يتم تجميع القيم اعتمادا على التاريخ من إلى.

 

ويعطيك العافية أخي محمد.

 

أنا جربت البروسيدجر ولم يعمل فى كلا الحالتين سواء بوجود data_date_g فى السليكت وGroup By أو نحذفهم

هو من الأفضل انه انشأ ref cursor‏

بتاريخ:

السلام عليكم

تم التعديل باستخدام Ref Cursor:

 

PROCEDURE get_processed_wtr (
   p_from_date         CHAR,
   p_to_date           CHAR,
   pc_get        OUT   sys_refcursor
)
IS
BEGIN
   OPEN pc_get FOR
      SELECT SUM (NVL (a.processed_wtr, 0)) processed_wtr
        INTO vn_processed_wtr
        FROM wpd_main_station_read a, wpd_main_station b
       WHERE a.company_no(+) = b.company_no
         AND a.main_station_no(+) = b.main_station_no
         AND a.data_date_g(+) BETWEEN TO_DATE (p_from_date, 'DD/MM/RRRR')
                                  AND TO_DATE (p_to_date, 'DD/MM/RRRR')
         AND a.company_no(+) = 1
         AND b.active_flag = 1
         AND b.d_r_print_flag = 1;
END;
بتاريخ:
  • كاتب الموضوع

تمام شغال شكراً جزيلاً

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.