إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

كيفية عمل حد اقصى للصفوف داخل جدول معين


11 رد (ردود) على هذا الموضوع

#1 m_elsaid

m_elsaid

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 31 March 2012 - 01:42 PM

السادة / اعضاء المنتدى الكرام..............
لدى قاعة بيانات صغيرة , وأود عمل trigger او sql statement تقوم بعمل حد اقصى للصفوف (Rows) داخل جدول معين.
برجاء التكرم بالافادة للاهمية,,,,,,,, و شكرا,,,,,,,

#2 Ahmad.Hasan

Ahmad.Hasan

    مشرف قسم الـ Forms & Reports والمشاريع

  • فريق الإشراف
  • 4,869 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Hasan
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle HCM Consultant

تاريخ المشاركة 31 March 2012 - 02:14 PM

السلام عليكم
ما الهدف من ذلك ؟

.Oracle E-Business Suite R12 HCM Certified Implementation Specialist

 

.Oracle Fusion Human Capital Management 11g Human Resources Certified Implementation Specialist

 


#3 ahmedbb

ahmedbb

    عضو مميز

  • الأعضــاء
  • 935 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 31 March 2012 - 02:20 PM

السلام عليكم
بعيدا عن الهدف المطلوب
فطبعا يمكن ذلك عن طريق pl
وذلك بعمل كود برمجى يقوم باحصاء عدد الصفوف وعند وصوله الى عدد معين
فانه يرفض ادخال صف جديد
معكم ولكم نتواصل

"وفوق كل ذى علم عليم"
برامج من انتاجى
شئون العاملين - الحضور و الانصراف - الاستحقاقات و الاجور
ادارة المراكز التدريبية - متابعة الانتاج - ادارة المستشفيات والعيادات - نظام ادارة المعارض ونقاط البيع
برنامج ادارة حركة السيارات - برنامج ادارة المكتبات - برنامج إدارة المدارس والمعاهد
من مواضيعى:
منادة المنيو من اى مكان http://www.araboug.o...nu&fromsearch=1
ايجاد اجمالى حقل معين فى فورم تابلور http://www.araboug.o...showtopic=50174
الوظيفة
Oracle Developer - Data Base Administrator - Programmer

Oracle Instructor

اسكاى بى ahmedoracle74
ahmedbb_work@hotmail
ahmedbb_work@yahoo

 

00201208042608

 

00201142271287
القاهرة - مصر




احمد محمود


#4 m_elsaid

m_elsaid

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 31 March 2012 - 02:28 PM

الهدف ان الجدول المطلوب تحديد الصفوف له هو جدول الصلاحيات للمستخدمين , ولا اريد ان يزيد عدد المستخدمين عن الحد المسموح به.

#5 m_elsaid

m_elsaid

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 31 March 2012 - 03:33 PM


اخى ahmedbb , هل يمكن ان تضع مثالا ل PL/SQL كود يقوم بعد الصفوف وفى حالة تجاوزها العدد المسموح , يتم رفض ادخال سجل جديد.


#6 yazan_othman

yazan_othman

    مشترك

  • الأعضــاء
  • 70 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 31 March 2012 - 05:55 PM

السلام عليكم

CREATE OR REPLACE TRIGGER --TRIGGER name  

BEFORE  INSERT

ON --table name

REFERENCING NEW AS NEW OLD AS OLD

FOR EACH ROW

DECLARE

v_count NUMBER;

BEGIN

IF INSERTING THEN

-----

--select  return count  row

IF /*count row */ >= 0 THEN

RAISE_APPLICATION_ERROR(-20099,'YOU MSG ');

END IF;

--  EXCEPTION

  --   WHEN OTHERS THEN

	   -- Consider logging the error and then re-raise

	---   RAISE;

END ;

اللهــــــم إن في القبــــــور أشخــــــاص نحبهــــــم وأحبونــــــا
اللهــــــم نسألــــــك بكل اســــــم هو لك أن تغفــــــر لهــــــم وترحمهــــم
اللهــــــم حــــــرم وجوههــــــم علــــــى النــــــار
برحمتك يا أكــــــرم الأكرميــــــن يــــــا الله



TWE7


#7 Mahmoud Ahmed El-Sayed

Mahmoud Ahmed El-Sayed

    عضو نشط

  • الأعضــاء
  • 346 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Database Design, Programming and Sports

تاريخ المشاركة 31 March 2012 - 11:49 PM

السلام عليكم

CREATE OR REPLACE TRIGGER --TRIGGER name  
BEFORE  INSERT
ON --table name
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
v_count NUMBER;
BEGIN
IF INSERTING THEN
-----
--select  return count  row
IF /*count row */ >= 0 THEN
RAISE_APPLICATION_ERROR(-20099,'YOU MSG ');
END IF;
--  EXCEPTION
  --   WHEN OTHERS THEN
	   -- Consider logging the error and then re-raise
	---   RAISE;
END ;


You should add below code to declaration section to avoid mutual exception

pragma autonomous_transaction


Mahmoud Ahmed El-Sayed

Senior Oracle Forms & ADF developer @ MCIT

Dive in Oracle Blog


#8 Mahmoud Ahmed El-Sayed

Mahmoud Ahmed El-Sayed

    عضو نشط

  • الأعضــاء
  • 346 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Database Design, Programming and Sports

تاريخ المشاركة 01 April 2012 - 08:48 AM

The best solution to do this to create materialized view and create check constraint on materialize view


assume that your table as below
CREATE TABLE USERS_TABLE (USER_ID VARCHAR2 (50), USER_NAME VARCHAR2 (100));


then create below materialize view



CREATE MATERIALIZED VIEW LOG ON USERS_TABLE WITH ROWID(USER_ID) INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW mv
  REFRESH FAST
  ON COMMIT
	AS
	SELECT 1 dummy, COUNT(1)  no_of_rows
	  FROM USERS_TABLE
	 GROUP BY 1;



Now add check constraint to materialize view


ALTER TABLE MV ADD CONSTRAINT CHECK_MAX_USERS CHECK(no_of_rows<=3);

Now if you insert more than 3 rows in USERS_TABLE, you will face exception


تم التعديل بواسطة Mahmoud Ahmed El-Sayed, 01 April 2012 - 09:16 AM.

Mahmoud Ahmed El-Sayed

Senior Oracle Forms & ADF developer @ MCIT

Dive in Oracle Blog


#9 ahmedbb

ahmedbb

    عضو مميز

  • الأعضــاء
  • 935 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 April 2012 - 09:07 AM

declare
v number
begin
select count(id) into v
if v>3 then
RAISE Form_Trigger_Failure;
end if

"وفوق كل ذى علم عليم"
برامج من انتاجى
شئون العاملين - الحضور و الانصراف - الاستحقاقات و الاجور
ادارة المراكز التدريبية - متابعة الانتاج - ادارة المستشفيات والعيادات - نظام ادارة المعارض ونقاط البيع
برنامج ادارة حركة السيارات - برنامج ادارة المكتبات - برنامج إدارة المدارس والمعاهد
من مواضيعى:
منادة المنيو من اى مكان http://www.araboug.o...nu&fromsearch=1
ايجاد اجمالى حقل معين فى فورم تابلور http://www.araboug.o...showtopic=50174
الوظيفة
Oracle Developer - Data Base Administrator - Programmer

Oracle Instructor

اسكاى بى ahmedoracle74
ahmedbb_work@hotmail
ahmedbb_work@yahoo

 

00201208042608

 

00201142271287
القاهرة - مصر




احمد محمود


#10 Mahmoud Ahmed El-Sayed

Mahmoud Ahmed El-Sayed

    عضو نشط

  • الأعضــاء
  • 346 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Database Design, Programming and Sports

تاريخ المشاركة 01 April 2012 - 09:17 AM

declare
v number
begin
select count(id) into v
if v>3 then
RAISE Form_Trigger_Failure;
end if


The questioner ask how to do it from database(trigger) not from oracle forms


Mahmoud Ahmed El-Sayed

Senior Oracle Forms & ADF developer @ MCIT

Dive in Oracle Blog


#11 ahmedbb

ahmedbb

    عضو مميز

  • الأعضــاء
  • 935 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 April 2012 - 10:14 AM


declare
v number
begin
select count(id) into v
if v>3 then
RAISE Form_Trigger_Failure;
end if


The questioner ask how to do it from database(trigger) not from oracle forms



he did not determain to use it in sql or in forms


"وفوق كل ذى علم عليم"
برامج من انتاجى
شئون العاملين - الحضور و الانصراف - الاستحقاقات و الاجور
ادارة المراكز التدريبية - متابعة الانتاج - ادارة المستشفيات والعيادات - نظام ادارة المعارض ونقاط البيع
برنامج ادارة حركة السيارات - برنامج ادارة المكتبات - برنامج إدارة المدارس والمعاهد
من مواضيعى:
منادة المنيو من اى مكان http://www.araboug.o...nu&fromsearch=1
ايجاد اجمالى حقل معين فى فورم تابلور http://www.araboug.o...showtopic=50174
الوظيفة
Oracle Developer - Data Base Administrator - Programmer

Oracle Instructor

اسكاى بى ahmedoracle74
ahmedbb_work@hotmail
ahmedbb_work@yahoo

 

00201208042608

 

00201142271287
القاهرة - مصر




احمد محمود


#12 Mahmoud Ahmed El-Sayed

Mahmoud Ahmed El-Sayed

    عضو نشط

  • الأعضــاء
  • 346 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Database Design, Programming and Sports

تاريخ المشاركة 01 April 2012 - 11:31 AM

السادة / اعضاء المنتدى الكرام..............
لدى قاعة بيانات صغيرة , وأود عمل trigger او sql statement تقوم بعمل حد اقصى للصفوف (Rows) داخل جدول معين.
برجاء التكرم بالافادة للاهمية,,,,,,,, و شكرا,,,,,,,

The best solution to do this to create materialized view and create check constraint on materialize view


assume that your table as below
CREATE TABLE USERS_TABLE (USER_ID VARCHAR2 (50), USER_NAME VARCHAR2 (100));


then create below materialize view



CREATE MATERIALIZED VIEW LOG ON USERS_TABLE WITH ROWID(USER_ID) INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW mv
  REFRESH FAST
  ON COMMIT
	AS
	SELECT 1 dummy, COUNT(1)  no_of_rows
	  FROM USERS_TABLE
	 GROUP BY 1;



Now add check constraint to materialize view


ALTER TABLE MV ADD CONSTRAINT CHECK_MAX_USERS CHECK(no_of_rows<=3);

Now if you insert more than 3 rows in USERS_TABLE, you will face exception



declare
v number
begin
select count(id) into v
if v>3 then
RAISE Form_Trigger_Failure;
end if


The questioner ask how to do it from database(trigger) not from oracle forms



he did not determain to use it in sql or in forms

Please read #1 in post

وأود عمل trigger او sql statement تقوم بعمل حد اقصى للصفوف (Rows) داخل جدول معين


Mahmoud Ahmed El-Sayed

Senior Oracle Forms & ADF developer @ MCIT

Dive in Oracle Blog