بتاريخ: 2 سبتمبر 201411 سنة comment_254315 سلام عليكممساعدة فى انشاء 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'); وده صورة من نتيجة الكويرى مكن المساعدة تم تعديل 2 سبتمبر 201411 سنة بواسطة Ahmad.Hasan تقديم بلاغ
بتاريخ: 2 سبتمبر 201411 سنة comment_254316 السلام عليكم جرب التالي: 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; / تقديم بلاغ
بتاريخ: 2 سبتمبر 201411 سنة كاتب الموضوع comment_254328 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; تقديم بلاغ
بتاريخ: 3 سبتمبر 201411 سنة comment_254369 السلام عليكم اخي الكريمكما وضح لك اخي 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; تقديم بلاغ
بتاريخ: 3 سبتمبر 201411 سنة comment_254370 السلام عليكم اخي الكريم كما وضح لك اخي 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 حتى يتم تجميع القيم اعتمادا على التاريخ من إلى. ويعطيك العافية أخي محمد. تقديم بلاغ
بتاريخ: 3 سبتمبر 201411 سنة كاتب الموضوع comment_254371 السلام عليكم اخي الكريم كما وضح لك اخي 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 تقديم بلاغ
بتاريخ: 4 سبتمبر 201411 سنة comment_254427 السلام عليكم تم التعديل باستخدام 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; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.