![]() |
|
استخراج جميع المعلومات من قاعدة بيانات Firebird/Interbase - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي و التعامل مع قواعد البيانات (https://delphi4arab.net/forum/forumdisplay.php?fid=23) +--- الموضوع : استخراج جميع المعلومات من قاعدة بيانات Firebird/Interbase (/showthread.php?tid=10505) |
استخراج جميع المعلومات من قاعدة بيانات Firebird/Interbase - أبو معاذ - 19-10-2019 السلام عليكم ورحمة الله وبركاته ، كنت أبحث في النت عن كيفية استخراج قائمة الجداول الموجودة في قاعدة بيانات الخاصة بي من نوع 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_POSITION14- وفي إصدار 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;هذا ما تم جمعه ، أرجو أن أكون قد وفقت لاختيار هذا الموضوع. نفع الله به. بالتوفيق للجميع. RE: استخراج جميع المعلومات من قاعدة بيانات Firebird/Interbase - khalmoh1971 - 26-03-2022 ممكن مثال على الاستخدام RE: استخراج جميع المعلومات من قاعدة بيانات Firebird/Interbase - Lam.Abdeldjalil - 08-04-2022 (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 |