استخراج جميع المعلومات من قاعدة بيانات 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 ) ضيف كريم