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

كيف احفظ قيم افتراضيه جديده لجدول يوميا تلقائيا

Featured Replies

بتاريخ:

لدي جدول خزينه وجدول مشتريات وجدول مبيعات ، لدي DataBase Trigger يقوم بإضافه قيمه المبيعات s_total للوارد في الخزينه cash_in اعتمادا على تاريخ اليوم ، وكذلك خصم قيمة المشتريات b_total للصادر في الخزينه cash_out ايضا اعتمادا على تاريخ اليوم ، المشكله انه في كل يوم يجب ان احفظ قيم افتراضيه في جدول الخزينه حتي يعمل بصوره صحيحه كالتالي :
التاريخ : (تاريخ اليوم الجديد)
الوارد : 0
الصادر : 0

اريد ان احل هذه المشكله برمجيا ، فهل من فكره ؟

بتاريخ:

ربما من خلال تريقر يقوم بالبحث عن SYSDATE في آخر مره تم فيها الحفظ ، فإذا لم يوجد يقوم من خلال جمله IF بالحفظ في جدول الخزينه اكالتالي :
التاريخ : SYSDATE
الوارد = الصادر = 0
لكني لا اعرف ذلك برمجيا ، اتمني من احد الاخوه وضع الكود

بتاريخ:

عزيزي
السلام عليكم ورحمة الله وبركاتة :-
الفكرة تتخلص بالاتي
نفس ال SQL التي تجريها يدويا يوميا في عملية الحفظ
تقوم بتعديل بسيط عليها في - Trigger ON-INSERT للجدولين المشتريات والمبيعات
بمعنى اذا كان تاريخ العملية الذي يجريها المستخدم(الذي هو تاريخ اليوم) = تاريخ اخر عملية تمت يعمل UPDATE لجدول الخزينة0
اذا كان تاريخ العملية (الذي هو تاريخ اليوم) <> تاريخ آخر علمية تمت يعمل INSERT لجدول الخزينة0
بمعنى تجبر المستخدم ان يجري UODATE و INSERT على جدول الخزينة وهو لايعلم
وممكن في DataBase Trigger تتم ايضا0
ولو اوضحت اسماء الجداول والحقول وال SQL سوف تجد الاجابة الشافيه عند الاعضاء
وفوق كل ذي علم عليم 0
بالتوفيق والسداد،،،،،

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

جدول الخزينه : اسم الجدول bursary
الحقول :
التاريخ b_date
الوارد cash_in
الصادر cash_out

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

اكمل المشاركة

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

بتاريخ:

جربي هذا الكود (لم اجرب الكود ولكن ربما يعطي الفكره التي شرحتها مع اني اري فكره الاخ محمد الحيلان هي الاجمل)




declare 
DATE1 DATE;
DATE2 DATE;
DATE3 DATE;
begin select (max(nvl(BURSARY.B_DATE,SYSDATE))) into DATE1 from BURSARY; date2 := sysdate -1;
date3 := sysdate -2;
IF DATE1 = DATE2 THEN
	INSERT INTO BURSARY (b_DATE, CASH_IN, CASH_OUT, STOCK)
VALUES(TO_DATE(SYSDATE,'DD/MM/YYYY'),0,0,0);
message('تم تحديث التاريخ ليوم واحد.');
ELSE IF 
	 DATE1 = DATE3 THEN
	 INSERT INTO BURSARY (b_DATE, CASH_IN, CASH_OUT, STOCK)
VALUES(TO_DATE(SYSDATE,'DD/MM/YYYY'),0,0,0);
message('تم تحديث التاريخ ليومين');
ELSE IF DATE1 = SYSDATE THEN
	message('لا تحتاج لتحديث.');

else
	message('التاريخ اقدم من يومين ، الرجاء مراجعة بيانات الخزينه.');
RAISE FORM_TRIGGER_FAILURE;
	end if;

end if;
end if;

end;


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

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

قمت بالاستفادة من كود الاخ omdawebs وفكره الأخ محمد على الحيلاني ، فخرجت بالكود التالي :




declare 
DATE1 DATE;
begin select (max(nvl(BURSARY.B_DATE,SYSDATE))) into DATE1 from BURSARY; IF DATE1 = SYSDATE THEN
message('لا تحتاج الخزينة للتحديث.');
ELSE IF 
	 DATE1 <> sysdate  THEN
		INSERT INTO BURSARY (b_DATE, CASH_IN, CASH_OUT, STOCK)
VALUES(TO_DATE(SYSDATE,'DD/MM/YYYY'),0,0,0);
COMMIT;
message('تم تحديث بيانات الخزينة.');
RAISE FORM_TRIGGER_FAILURE;
	end if;
end if;
end;



ووضعتها في تريقر WHEN-NEW-FORM-INSTANCE لكن الفورم يفتح ويقفل ، فعملتها في BUSH BUTTON ، الكود يعمل بصوره ممتازه بس المشكله اني كل ما اضغط على البتون يقوم بانشاء ريكورد جديد في جدول الخزينه ، كما انني اريد وضعه في التريقر السابق للشاشه الرئيسية لو امكن ، فهل هناك اي تعديل في الكود ؟

بتاريخ:

السلام عليكم ورحمة الله وبركاته

هذا الـ trigger يقوم بمطابقة التاريخ حيث إذا لم يتطابق التاريخ يرجع بقيمة صفر وبالتالي يقوم بإدخال التاريخ والقيمة في جدول الخزينة اما اذا تطابق التاريخ فيرجع بقيمة واحد وبالتالي يقوم بتعديل القيمة فقط في جدول الخزينة
حيث يجب تكرار الـ trigger بما يتناسب مع جدول المشتريات

create  or  replace  trigger   t_bursary_s_total   after  insert  on   sales   for  each  row
declare 
aa   number; 
begin
select count(b_date) into aa  from  bursary  where b_date = :new.s_date  ;
if  aa = 0 
then   insert   into  bursary ( b_date , cash_in )
values (sales.s_date , sales.cash_in);
elsif  aa = 1 
then   update  bursary  set  cash_in = bursary.cash_in + :new.cash_in
where bursary.b_data = :new.s_date;

else 

raise_application_error(-20001, 'التاريخ مكرر'); 

end  if; 
end;  




aa number

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

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

عفوا اخي هذا الترقر يقوم بحساب عدد السجلات ، وانا اريد ان يتم تحديث الخزينه بتاريخ النظام SYSDATE ولم يعمل التريقر كما يجب

بتاريخ:

السلام عليكم ورحمة الله وبركاته

لقد تم تطبيق و تعديل الكود السابق كما يلي


create  table  sal ( s_date   date , s_total   number(12,3) );

create  table  pur ( p_date   date , p_total   number(12,3) );

create  table  bursary ( b_date  date , cash_in  number(12,3) , cash_out  number(12,3) );

create  or  replace  trigger  t_bursary_sal  before  insert  on   sal   for  each  row
declare
aa   number ;
begin
select  count(b_date)  into  aa from bursary  where b_date = :new.s_date  ;
if   aa = 0
then  insert into bursary ( b_date , cash_in )   values ( :new.s_date , :new.s_total );
elsif  aa = 1
then   update  bursary  set  cash_in = nvl(bursary.cash_in,0) + :new.s_total
where  bursary.b_date = :new.s_date;
else
raise_application_error(-20001,' التاريخ مكرر ');
end  if;  end;  

create  or  replace  trigger  t_bursary_pur  before  insert  on   pur   for  each  row
declare
aa   number ;
begin
select  count(b_date)  into  aa from bursary  where b_date = :new.p_date  ;
if   aa = 0
then  insert into bursary ( b_date , cash_out )   values ( :new.p_date , :new.p_total );
elsif  aa = 1
then   update  bursary  set  cash_out = nvl(bursary.cash_out,0) + :new.p_total
where  bursary.b_date = :new.p_date;
else
raise_application_error(-20001,' التاريخ مكرر ');
end  if;  end; 

insert   into   sal  values ( '01/01/06' , 1000 );
insert   into   pur values ( '01/01/06'  , 1000 );
insert   into   sal  values ( '01/01/06' , 2000 );
insert   into   pur values ( '02/01/06'  , 1000 );
insert   into   sal  values ( '02/01/06' , 5000 );
insert   into   sal  values ( '03/01/06' , 10000 );
insert   into   pur values ( '03/01/06'  , 15000 );
insert   into   sal  values ( '04/01/06' , 99999 );

SQL> select * from bursary;

B_DATE      CASH_IN   CASH_OUT
-------- ---------- ----------
01/01/06       3000       1000
02/01/06       5000       1000
03/01/06      10000      15000
04/01/06      99999

database_trigger.zip

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

الاخوه الكرام ، والله تعبت من الموضع ، وجزاك الله اخ jamal_rrkk على الرد المتعوب فيه ، بس المشكلة اني ما قدرت اكيف جوابك مع مشكلتي لاختلاف الجداول والمسميات والتريقرس ، على العموم مرفق لكم كل الجداول والفورمات في ملف مضغوط وبه ملف SQL اسمه BURSARY فيه التريقر اللي يجب التعديل فيه حتي يعمل بصوره صحيحه ، اريد التعليق على الكود لتوضيح المشكله وجزاكم الله خير

BURSARY.ZIP

بتاريخ:

السلام عليكم ورحمة الله وبركاته

أختي الكريمة عدلي الـ TRIGGERS

COSTING_FOE
BURSARY_CUS_BALANCE_ADJ
BURSARY_IMP_BALANCE_ADJ


بحيث يمكن من خلالها تحديث البيانات في حالة التعديل أو الحذف فقط

وفي حالة الإدخال اكتبي ثلاثة TRIGGERS متعلقة بالإدخال مطابقة لكود الإدخال الذي تم توضحه أعلاه

آما بالنسبة للكود أدناه فهو يرجع بقيمة NULL ولا يرجع بالتاريخ الحالي SYSDATE في حالة عدم وجود أي تاريخ في العامود

select (max(nvl(BURSARY.B_DATE,SYSDATE))) from BURSARY;



كما انه في حال كتابة الكود التالي

INSERT INTO BURSARY (b_DATE, CASH_IN, CASH_OUT, STOCK)
VALUES(TO_DATE(SYSDATE,'DD/MM/YYYY'),0,0,0);

ومن ثم كتابة 

Delete from  BURSARY where b_DATE = sysdate;
Delete from  BURSARY where b_DATE = ( select sysdate from dual );


لا يتم حذف أي صف رغم أنه تم أخذ التاريخ من الجهاز وهذا يعني انه لا يتحقق الشرط التالي

IF DATE1 = SYSDATE

لذلك تحدث المشكله اني كل ما اضغط على البتون يقوم بانشاء ريكورد جديد في جدول الخزينه

بتاريخ:

عزيزي
السلام عليكم ورحمة الله وبركاته:-
لم استطيع تحميل الملف المرفق في اخر مشاركه
وعتقد ان كود الاخ jamal_rrkk هو الكود الصحيح المناسب 100% حيث تمت تجربته
ويعمل بصوره رائعه0
والاخ jamal_rrkk يستحق الشكر والعرفان بالجميل وأكثر الله من امثاله وجعل مايقوم به
في موازين حسناته امين000
وشكرا،،،،،،،

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

اشكرك بكل المعاني اخي jamal_rrkk على المجهود وجعله الله في ميزان حسناتك ، سأوافيكم انشاء الله بالفورمات والنتائج في بوست كامل انشاء الله

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

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

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

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

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

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.