الانتقال إلى المحتوى
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.

لغز محير لخبراء Sql

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته
برجاء التكرم بقراءة المعطيات التالية والمساعدة في اعطاء الناتج من خلال
sql statement or pl code

SQL> select emp_code,to_char(dated,'dd/mm/yyyy') dated,inout from ATD
2 order by emp_code,dated,INOUT;

EMP_ DATED INOUT
---- ---------- --------
0085 20/10/2007 08:09:27
0085 20/10/2007 12:58:30
0085 20/10/2007 14:08:32
0085 20/10/2007 18:00:04
0085 21/10/2007 08:10:02
0085 21/10/2007 12:56:53
0085 21/10/2007 14:07:38
0085 21/10/2007 18:44:44
0085 22/10/2007 08:12:34
0085 22/10/2007 13:11:57
0085 22/10/2007 14:08:33
0085 22/10/2007 18:11:58
0086 23/10/2007 08:12:00
0086 23/10/2007 13:00:05
0086 23/10/2007 14:05:48
0086 23/10/2007 18:04:42
0086 24/10/2007 08:13:35
0086 24/10/2007 13:06:17
0086 24/10/2007 14:11:06

20 rows selected.

the required is to make a select statement which results the following

EMP_code DATED INOUT1 INOUT2 INOUT3 INOUT4
0085 20/10/2007 08:09:27 12:58:30 14:08:32 18:00:04
0085 21/10/2007 08:10:02 12:56:53 14:07:38 18:44:44
AND SO ON TO SHOW DAY ONE TIME WITH THE 4 TIMES FOR EVERY EMPLOYEE

YOU are allowd to give any solution to get the result

FOR MORE INFORMATION

CREATE TABLE ATD(EMP_CODE VARCHAR2(4),DATED DATE,INOUT DATE);
THEN INSERT THESE VALUES INSIDE THIS TABLE LIKE

INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('08:09:27','HH24:MI:SS'));
INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('12:58:30','HH24:MI:SS'));
INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('14:08:32','HH24:MI:SS'));
INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('18:00:04','HH24:MI:SS'));
AND SO ON FOR INSERTING THE ABOVE DATA

THEN YOU CAN USE the following to display date and time as I listed before

SQL> select emp_code,to_char(dated,'dd/mm/yyyy') dated,inout from ATD
2 order by emp_code,dated,INOUT;

I hope you reply it.

to get this data in text file please download the attached file

to_araboracle.txt

تم تعديل بواسطة mageed_ahmed

بتاريخ:

الحل كالتالي باستخدام NESTED CURSOR

DECLARE
 INOUT_TEMP VARCHAR2(80) :='';
 CURSOR C1 IS
SELECT DISTINCT EMP_CODE, TO_CHAR(DATED, 'DD/MM/YYYY') DATED
  FROM ATD
 ORDER BY 1, 2;

 CURSOR C2(E_CODE IN VARCHAR2, DAT VARCHAR2) IS
SELECT TO_CHAR(INOUT, 'HH24:MI:SS') INOUT
  FROM ATD
 WHERE EMP_CODE = E_CODE
   AND TO_CHAR(DATED,'DD/MM/YYYY') = DAT
 ORDER BY 1;
BEGIN
 FOR I IN C1 LOOP
FOR J IN C2(I.EMP_CODE , I.DATED) LOOP
  INOUT_TEMP := INOUT_TEMP||' '||J.INOUT;
END LOOP;
DBMS_OUTPUT.PUT_LINE(I.EMP_CODE||' '||I.DATED||INOUT_TEMP);
INOUT_TEMP := '';
 END LOOP;
END;



اتمنى ان يكون المطلوب وما توفيقي الا بالله

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

جزاكم الله خيرا الجزاء وبارك فيك وجعله في ميزان حسانتك

الفكرة واضح أنها صحيحة وشيقة جدا وعلي أي حال جاري التجربة

بارك الله فيك وأصلح حالك

بتاريخ:

شكرا على المعلومه المميزه ساقوم بحفظها في ملف
الارشيف الخاص بي
بارك الله بيكم

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

أخي الفاضل
بالنظر الي
EMP_ DATED INOUT
---- --------- --------
0992 20-OCT-07 17:31:34
0992 20-OCT-07 08:06:38
0992 21-OCT-07 08:02:36
0992 21-OCT-07 17:29:55
0992 22-OCT-07 07:54:28
0992 22-OCT-07 17:30:41
0992 23-OCT-07 07:59:09
0992 23-OCT-07 17:30:35


حينما يصل الكود الي الصف الاخير 0992 24-OCT-07 07:58:29 للموظف 0992 فانه يعطي ORA-6502

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

بمعني اذا كان INOUT ظاهر مرة واحدة كأن كان حضور الموظف مرة واحدة في اليوم يعطي رسالة الخطأ يعني الكود الذي تفضلت به يحتاج INOUT مدخلين للموظف في يوم واحد

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

جزاكم الله خيرا
تم حل المشكلة والحمد لله

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

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

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

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

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

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.