استخراج جميع المعلومات من قاعدة بيانات Firebird/Interbase
#1
السلام عليكم ورحمة الله وبركاته ،

كنت أبحث في النت عن كيفية استخراج قائمة الجداول الموجودة في قاعدة بيانات الخاصة بي من نوع Interbase ،

فوجدت هذه التعليمات (استعلامات SQL ) و تنطبق أيضا على ال Firebird.



أضعها هنا للفائدة :


1- قائمة الجدوال Tables :






كود :
SELECT DISTINCT RDB$RELATION_NAME   FROM RDB$RELATION_FIELDS WHERE RDB$SYSTEM_FLAG=0;   -- or   SELECT RDB$RELATION_NAME   FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG=0;


2- قائمة الفيوز ViEWS :



كود :
SELECT DISTINCT RDB$VIEW_NAME   FROM RDB$VIEW_RELATIONS; -- show only the VIEWs referencing a given table -- إظهار الفيوز الخاص بجدول معين و ليكن TEST SELECT DISTINCT RDB$VIEW_NAME   FROM RDB$VIEW_RELATIONS WHERE RDB$RELATION_NAME='TEST';




3- قائمة المستخدمين USERS :

كود :
SELECT DISTINCT RDB$USER   FROM RDB$USER_PRIVILEGES;

4- قائمة INDICES:

كود :
--  خاصة بالجدول TEST2 SELECT RDB$INDEX_NAME   FROM RDB$INDICES WHERE RDB$RELATION_NAME='TEST2'

5- أسماء الحقول FIELDS لجدول معين :


كود :
SELECT RDB$FIELD_NAME   FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='TEST2';

6- تفلصيل أكثر عن الحقول لجدول معين :

كود :
SELECT r.RDB$FIELD_NAME AS field_name,         r.RDB$DESCRIPTION AS field_description,         r.RDB$DEFAULT_VALUE AS field_default_value,         r.RDB$NULL_FLAG AS field_not_null_constraint,         f.RDB$FIELD_LENGTH AS field_length,         f.RDB$FIELD_PRECISION AS field_precision,         f.RDB$FIELD_SCALE AS field_scale,         CASE f.RDB$FIELD_TYPE           WHEN 261 THEN 'BLOB'           WHEN 14 THEN 'CHAR'           WHEN 40 THEN 'CSTRING'           WHEN 11 THEN 'D_FLOAT'           WHEN 27 THEN 'DOUBLE'           WHEN 10 THEN 'FLOAT'           WHEN 16 THEN 'INT64'           WHEN 8 THEN 'INTEGER'           WHEN 9 THEN 'QUAD'           WHEN 7 THEN 'SMALLINT'           WHEN 12 THEN 'DATE'           WHEN 13 THEN 'TIME'           WHEN 35 THEN 'TIMESTAMP'           WHEN 37 THEN 'VARCHAR'           ELSE 'UNKNOWN'         END AS field_type,         f.RDB$FIELD_SUB_TYPE AS field_subtype,         coll.RDB$COLLATION_NAME AS field_collation,         cset.RDB$CHARACTER_SET_NAME AS field_charset   FROM RDB$RELATION_FIELDS r   LEFT JOIN RDB$FIELDS f ON r.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME   LEFT JOIN RDB$COLLATIONS coll ON f.RDB$COLLATION_ID = coll.RDB$COLLATION_ID   LEFT JOIN RDB$CHARACTER_SETS cset ON f.RDB$CHARACTER_SET_ID = cset.RDB$CHARACTER_SET_ID   WHERE r.RDB$RELATION_NAME='TEST2'  -- table name ORDER BY r.RDB$FIELD_POSITION;


7- قائمة المولدات GENERATOR :

كود :
SELECT RDB$GENERATOR_NAME   FROM RDB$GENERATORS WHERE RDB$SYSTEM_FLAG=0;

8- قائمة TRIGGERS:

كود :
SELECT * FROM RDB$TRIGGERS WHERE RDB$SYSTEM_FLAG=0;

9- قائمة TRIGGERS خاصة بجدول معين :

كود :
SELECT * FROM RDB$TRIGGERS WHERE RDB$SYSTEM_FLAG = 0   AND RDB$RELATION_NAME='TEST2';

10-قائمة الدوال UDF المستخدمة :

كود :
SELECT * FROM RDB$FUNCTIONS WHERE RDB$SYSTEM_FLAG=0;

11- قائمة الإجراءات المخزنة   Stored Procedures :

كود :
SELECT * FROM RDB$PROCEDURES;

 12- استخراج معلومات أكثر عن TRIGGER  معين وليكن مثلا MYTRIGGER :

كود :
SELECT RDB$TRIGGER_NAME AS trigger_name,       RDB$RELATION_NAME AS table_name,       RDB$TRIGGER_SOURCE AS trigger_body,       CASE RDB$TRIGGER_TYPE         WHEN 1 THEN 'BEFORE'         WHEN 2 THEN 'AFTER'         WHEN 3 THEN 'BEFORE'         WHEN 4 THEN 'AFTER'         WHEN 5 THEN 'BEFORE'         WHEN 6 THEN 'AFTER'       END AS trigger_type,       CASE RDB$TRIGGER_TYPE         WHEN 1 THEN 'INSERT'         WHEN 2 THEN 'INSERT'         WHEN 3 THEN 'UPDATE'         WHEN 4 THEN 'UPDATE'         WHEN 5 THEN 'DELETE'         WHEN 6 THEN 'DELETE'       END AS trigger_event,       CASE RDB$TRIGGER_INACTIVE         WHEN 1 THEN 0 ELSE 1       END AS trigger_enabled,       RDB$DESCRIPTION AS trigger_comment   FROM RDB$TRIGGERS WHERE UPPER(RDB$TRIGGER_NAME)='MYTRIGGER'


13- معلومات أكثر عن VIEW  معين و ليكن مثلا  MYVIEW :

كود :
SELECT d.RDB$DEPENDENT_NAME AS view_name,         r.RDB$FIELD_NAME AS field_name,         d.RDB$DEPENDED_ON_NAME AS depended_on_table,         d.RDB$FIELD_NAME AS depended_on_field     FROM RDB$DEPENDENCIES d     LEFT JOIN RDB$RELATION_FIELDS r ON d.RDB$DEPENDENT_NAME = r.RDB$RELATION_NAME         AND d.RDB$FIELD_NAME = r.RDB$BASE_FIELD   WHERE UPPER(d.RDB$DEPENDENT_NAME)='MYVIEW'     AND r.RDB$SYSTEM_FLAG = 0     AND d.RDB$DEPENDENT_TYPE = 1 ORDER BY r.RDB$FIELD_POSITION

14- وفي إصدار Firebird 2.1  فما فوق ، يمكن استخراج المعلومات التالية (لم أجرب هذه التعليمة) :


كود :
SELECT RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION') AS engine_version,       RDB$GET_CONTEXT('SYSTEM', 'NETWORK_PROTOCOL') AS protocol,       RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS') AS address   FROM RDB$DATABASE;

هذا ما تم جمعه ،
أرجو أن أكون قد وفقت لاختيار هذا الموضوع.
نفع الله به.
بالتوفيق للجميع.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
[-] كل من 7 users say قال شكرا ل أبو معاذ على المشاركة المفيدة
  • S.FATEH, محمد عبد العزيز, bassem_43, wadoud, Bugos, Delphi4Us, Lam.Abdeldjalil
الرد
#2
ممكن مثال على الاستخدام
الرد
#3
(26-03-2022, 10:21 PM)khalmoh1971 كتب : ممكن مثال على الاستخدام

السلام عليكم

أعطيك مثالين
 1 إذا كنت تريد إنشاء برنامج لإدارة قاعدة البيانات مثل Flamerobin/Ibexpert هذه الإستعلامات ضرورية

2 تريد إفراغ قاعدة البيانات لأي سبب ( إنتهاء التمرين / الفترة التجريبية ..
هذه استعلامات  تسهل عليكم
أمثلة
تعطيل كل TRIGGERS

كود :
update     rdb$triggers set     rdb$trigger_inactive = 1 where     rdb$trigger_source is not null     and ((rdb$system_flag = 0)     or (rdb$system_flag is null))

تفعيلها

كود :
update     rdb$triggers set     rdb$trigger_inactive = 0 where     rdb$trigger_source is not null     and ((rdb$system_flag = 0)     or (rdb$system_flag is null))

اعادة قيم generators الى 0

كود :
execute block AS DECLARE VARIABLE s VARCHAR(100); DECLARE VARIABLE g VARCHAR(100); BEGIN FOR SELECT RDB$GENERATOR_NAME FROM RDB$GENERATORS WHERE RDB$SYSTEM_FLAG = 0 and RDB$GENERATOR_NAME<>'GEN_Prod_GROUP_ID' INTO :G DO BEGIN S = 'ALTER SEQUENCE ' || G || ' RESTART WITH 0'; EXECUTE STATEMENT :S; END END


حذف جميع السجلات من كل الجداول
* خذ بعين الإعتبار DEPENDENCIES   RDB$DEPENDENCIES

كود :
execute block as declare variable TBL varchar(50); begin   for select R.RDB$RELATION_NAME       from RDB$RELATION_FIELDS R       where R.RDB$SYSTEM_FLAG = 0 and             R.RDB$VIEW_CONTEXT is null       group by R.RDB$RELATION_NAME       into :TBL   do     execute statement 'delete from  ' || :TBL; end
[-] كل من 1 user says قال شكرا ل Lam.Abdeldjalil على المشاركة المفيدة
  • أبو معاذ
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم