ওরাকল এসকিউএল বিকাশকারী কোন প্রদত্ত টেবিলের রেফারেন্স দেয় তা আমি কীভাবে খুঁজে পাব?


199

ইন ওরাকল SQL বিকাশকারী , আমি একটি টেবিলের উপর তথ্য দেখার করছি আমি সীমাবদ্ধতা, যা আমার বিদেশী কি-সংকলন (এবং এইভাবে যা টেবিল এই টেবিল দ্বারা সমর্থিত হয়) দেখতে দিন দেখতে পারেন, এবং আমি কি দেখতে নির্ভরতা দেখতে পারেন প্যাকেজ এবং এই জাতীয় রেফারেন্স টেবিল। তবে আমি নিশ্চিত নন কী টেবিলটি সারণীতে রেফারেন্স দেবে।

উদাহরণস্বরূপ, বলুন আমি empটেবিলের দিকে তাকিয়ে আছি । এখানে আরও একটি সারণী রয়েছে emp_deptযা কোন কর্মচারী কোন বিভাগে কাজ করে তা ক্যাপচার করে, কোন empসারণির মাধ্যমে টেবিলের emp_idপ্রাইমারি কীটি উল্লেখ করে emp। একটি উপায় আছে (প্রোগ্রাম, এসকিউএল মাধ্যমে না কিছু UI 'তে উপাদান মাধ্যমে) যে খুঁজে পেতে emp_deptটেবিল রেফারেন্স empটেবিল আমাকে ছাড়া জানাতে চাই যে, থাকার emp_deptটেবিল বিদ্যমান?

উত্তর:


258

না। ওরাকল এসকিউএল বিকাশকারী থেকে এমন কোনও বিকল্প উপলব্ধ নেই।

আপনাকে নিজের হাতে একটি ক্যোয়ারী চালাতে হবে বা অন্য সরঞ্জাম ব্যবহার করতে হবে (উদাহরণস্বরূপ পিএলএসকিউএল বিকাশকারী এর বিকল্প রয়েছে)। নিম্নলিখিত এসকিউএল হ'ল এটি পিএলএসকিউএল বিকাশকারী দ্বারা ব্যবহৃত:

select table_name, constraint_name, status, owner
from all_constraints
where r_owner = :r_owner
and constraint_type = 'R'
and r_constraint_name in
 (
   select constraint_name from all_constraints
   where constraint_type in ('P', 'U')
   and table_name = :r_table_name
   and owner = :r_owner
 )
order by table_name, constraint_name

r_ownerস্কিমাটি কোথায় , এবং r_table_nameসেই টেবিলটি যার জন্য আপনি উল্লেখ খুঁজছেন for নামগুলি সংবেদনশীল


সাবধানতা অবলম্বন করুন কারণ ওরাকল এসকিউএল বিকাশকারীর রিপোর্ট ট্যাবটিতে "সমস্ত সারণী / নির্ভরতা" বিকল্পটি ALL_DEPENDENCIES থেকে রয়েছে যা " পদ্ধতি, প্যাকেজ, ফাংশন, প্যাকেজ সংস্থাগুলির মধ্যে নির্ভরশীলতা এবং বর্তমান ব্যবহারকারীর উপর নির্ভরশীলতা সহ অ্যাক্সেসযোগ্যকে ট্রিগার করে" কোনও ডাটাবেস লিঙ্ক ছাড়াই তৈরি করা ভিউগুলিতে "। । তারপরে, এই প্রশ্নের আপনার প্রশ্নের কোনও মূল্য নেই।


30
উত্তর করার জন্য ধন্যবাদ. চুষার জন্য ওরাকল এসকিএল বিকাশকারী লজ্জা পান।
গ্রেগ

1
আপনি PLSQL বিকাশকারী এই ফাংশনটি করতে সক্ষম হওয়ার কথা উল্লেখ করেছেন, আপনি কীভাবে ব্যাখ্যা করতে পারেন?
নিকোলাস

4
@ নিকোলাস, অবজেক্ট ব্রাউজারে একটি টেবিল নির্বাচন করুন, একটি টেবিলের উপর ডান ক্লিক করুন এবং "বিদেশী কী তথ্যসূত্র" নির্বাচন করুন
ফেরানবি

3
এই উত্তরটি উল্লেখ করে যে এসকিউএল বিকাশকারী ৪.১ এবং তারপরে এখন একটি বিকল্প "মডেল" ট্যাব রয়েছে যা ERD ফর্ম্যাটে এই তথ্যটি প্রদর্শন করবে।
স্নোরিংফ্রোগ

1
r_owner হ'ল স্কিমা আপনি ব্যবহার করছেন, r_table_name এমন সারণি যা আপনি রেফারেন্স খুঁজছেন
ফ্লোি

108

এটি এক্সটেনশন হিসাবে এসকিউএল বিকাশকারীকে যুক্ত করতে নিম্নলিখিতগুলি করুন:

  1. একটি এক্সএমএল ফাইলে নীচের কোডটি সংরক্ষণ করুন (উদাঃ fk_ref.xML):
<items>
    <item type="editor" node="TableNode" vertical="true">
    <title><![CDATA[FK References]]></title>
    <query>
        <sql>
            <![CDATA[select a.owner,
                            a.table_name,
                            a.constraint_name,
                            a.status
                     from   all_constraints a
                     where  a.constraint_type = 'R'
                            and exists(
                               select 1
                               from   all_constraints
                               where  constraint_name=a.r_constraint_name
                                      and constraint_type in ('P', 'U')
                                      and table_name = :OBJECT_NAME
                                      and owner = :OBJECT_OWNER)
                               order by table_name, constraint_name]]>
        </sql>
    </query>
    </item>
</items>
  1. এসকিউএল বিকাশকারীটিতে এক্সটেনশন যুক্ত করুন:

    • সরঞ্জাম> পছন্দসমূহ
    • ডাটাবেস> ব্যবহারকারী সংজ্ঞায়িত এক্সটেনশনগুলি
    • "সারি যুক্ত করুন" বোতামটি ক্লিক করুন
    • "এডিটোর" টাইপ করুন তে নির্বাচন করুন, অবস্থানটি যেখানে আপনি উপরের এক্সএমএল ফাইলটি সংরক্ষণ করেছেন
    • "ওকে" ক্লিক করুন তারপরে এসকিউএল বিকাশকারী পুনরায় চালু করুন
  2. যে কোনও টেবিলে নেভিগেট করুন এবং আপনার এখন এসকিউএল একের পাশে একটি অতিরিক্ত ট্যাব দেখা উচিত, লেকযুক্ত এফকে রেফারেন্স, যা নতুন এফকে তথ্য প্রদর্শন করে।

  3. উল্লেখ


আপনি কি জানেন যে প্যাকেজগুলির জন্য নোড নামটি কী? ওয়েবে আমি যে সমস্ত এক্সএসডি লিঙ্কগুলি পেয়েছি সেগুলি আর বৈধ নয় (ওরাকলে যেমন সেগুলি সরিয়ে দেওয়া হয়েছে)।
জেমস সামনার্স

1
আমি আপনার পরামর্শে একটি ছোট পরিবর্তন যুক্ত করেছি: এবং মালিক = ব্যবহারকারী দ্বারা অর্ডার দেওয়ার আগে যেমন আপনার দুটি স্কিমায় একই টেবিলের দুটি উদাহরণ থাকলে আপনার স্কিমার সাথে সম্পর্কিত রেফারেন্সগুলি কেবল পাবেন
user1708042

আমি এই শর্তটি যুক্ত করেছি: and owner = :OBJECT_OWNERআগে and exists
এম ডেনিস

3
@ এম-ডেনিস, এক্ষেত্রে আপনি অন্যান্য স্কিমা থেকে রেফারেন্স মিস করতে পারেন।
Youw

এটি প্রয়োগ করে এবং চলার পরে describe books;এবং select * from books;এটি ওরাকল স্কেল বিকাশকারী ভিএম-এ fk রেফারেন্স ট্যাবটি দেখায় না।
এমএলস্টুডেন্ট 33

36

নীচের ক্যোয়ারিতে [আপনার সারণী] এম্পের সাথে প্রতিস্থাপন করুন

select owner,constraint_name,constraint_type,table_name,r_owner,r_constraint_name
  from all_constraints 
 where constraint_type='R'
   and r_constraint_name in (select constraint_name 
                               from all_constraints 
                              where constraint_type in ('P','U') 
                                and table_name='[YOUR TABLE]');

আমি মনে করি constraint_type in ('P','U') অতিরিক্ত অতিরিক্ত এটি নির্দিষ্ট করার দরকার নেই। আপনি একটি ব্যবহার করছেন IN, সুতরাং এটি ঠিক অনেকগুলি এর মতো ORএবং আমরা কেবল ওআর এর একমাত্র ক্রিয়াকলাপ সম্পর্কে যত্নশীল যা সত্যকে মূল্যায়ন করে।
গ্যাব 好人 好人

10

আপনি এই ALL_CONSTRAINTSভিউ থেকে এটিকে জিজ্ঞাসা করতে সক্ষম হতে পারেন :

SELECT table_name
FROM ALL_CONSTRAINTS
WHERE constraint_type = 'R' -- "Referential integrity"
  AND r_constraint_name IN
    ( SELECT constraint_name
      FROM ALL_CONSTRAINTS
      WHERE table_name = 'EMP'
        AND constraint_type IN ('U', 'P') -- "Unique" or "Primary key"
    );

1
বিদেশী কীগুলি কেবল প্রাথমিক কীগুলি নয়, অনন্য কীগুলিও উল্লেখ করতে পারে, টেবিলের নামটি একাধিক স্কিমায় ব্যবহার করা যেতে পারে যার ফলে একাধিক ম্যাচের ফলাফল তৈরি হবে। আপনি যদি 'All_Canstraints' ব্যবহার করতে চলেছেন এবং 'ব্যবহারকারীর_কন্ট্রেন্টস' ব্যবহার না করেন তবে আপনাকে 'মালিক' কলামটিও ব্যবহার করতে হবে।
মার্ক রডি

'আর' 'ইউ' এবং 'পি' কী তা বলার জন্য ধন্যবাদ
জেফ

এসকিউএল অনুরোধের শেষে সেমিকোলনটি ভুলে যাবেন না।
গ্যাব 好人 好人

যাইহোক, ('পি', 'ইউ') এ সীমাবদ্ধতা_প্রকারটি অতিমাত্রায় প্রোথিত, কারণ যদি কোনও বাধা TOTO এর সীমাবদ্ধতা_প্রকারটি 'আর' হয়, তবে TOTO এর r_constraint_name অবশ্যই 'P' বা 'U টাইপের সংকোচনের নাম is 'রেফারেন্স সারণীতে। এটি নির্দিষ্ট করার দরকার নেই।
গ্যাব 好人 好人

9

২০১৫ সালের মে মাসে প্রকাশিত এসকিউএল বিকাশকারী ৪.১, একটি মডেল ট্যাব যুক্ত করেছে যা টেবিলের বিদেশী কীগুলি দেখায় যা কোনও সত্তা সম্পর্ক ডায়াগ্রাম ফর্ম্যাটে আপনার টেবিলকে উল্লেখ করে।


1
কোনও কারণে যদি আপনার কোনও স্ক্রিপ্টে এটি প্রয়োজন হয় তবে কম দরকারী, তবে আপনাকে যদি সংযোগগুলি সম্পর্কে জানতে প্রয়োজন তবে এটি আধুনিক পথে যাওয়ার মতো মনে হচ্ছে।
স্নোরিংফ্রোগ

1
@ স্নোরিংফ্রোগ ভালভাবে প্রযুক্তিগতভাবে প্রশ্নটি একটি ইউআই উপাদানগুলির জন্য জিজ্ঞাসা করে তাই এটিই সবচেয়ে উপযুক্ত উত্তর
হোয়াইটপয়েন্ট পয়েন্ট

4

কিভাবে ভালো কিছু সম্পর্কে:

SELECT c.constraint_name, c.constraint_type, c2.constraint_name, c2.constraint_type, c2.table_name
  FROM dba_constraints c JOIN dba_constraints c2 ON (c.r_constraint_name = c2.constraint_name)
 WHERE c.table_name = <TABLE_OF_INTEREST>
   AND c.constraint_TYPE = 'R';

2
এটি আমার জন্য কাজ করেন যখন আমি থেকে সারণী নাম পরিবর্তিত dba_constraintsকরতে all_constraintsযেমন:SELECT c.constraint_name, c.constraint_type, c2.constraint_name, c2.constraint_type, c2.table_name FROM all_constraints c JOIN all_constraints c2 ON (c.r_constraint_name = c2.constraint_name) WHERE c.table_name = '<TABLE_OF_INTEREST>' AND c.constraint_TYPE = 'R';
chrisjleu

4
SELECT DISTINCT table_name, 
                constraint_name, 
                column_name, 
                r_table_name, 
                position, 
                constraint_type 
FROM   (SELECT uc.table_name, 
               uc.constraint_name, 
               cols.column_name, 
               (SELECT table_name 
                FROM   user_constraints 
                WHERE  constraint_name = uc.r_constraint_name) r_table_name, 
               (SELECT column_name 
                FROM   user_cons_columns 
                WHERE  constraint_name = uc.r_constraint_name 
                       AND position = cols.position)           r_column_name, 
               cols.position, 
               uc.constraint_type 
        FROM   user_constraints uc 
               inner join user_cons_columns cols 
                       ON uc.constraint_name = cols.constraint_name 
        WHERE  constraint_type != 'C') 
START WITH table_name = '&&tableName' 
           AND column_name = '&&columnName' 
CONNECT BY NOCYCLE PRIOR table_name = r_table_name 
                         AND PRIOR column_name = r_column_name; 

এটি অত্যন্ত কার্যকর - একটি নির্দিষ্ট মূল টেবিল থেকে পুনরাবৃত্তভাবে সমস্ত টেবিল প্রদর্শন করে, যা এই মূল সারণীতে আপনি নির্বাচিত কলামের মান হিসাবে কী হিসাবে ধরে আছেন। দুর্দান্ত, ধন্যবাদ
Ev0oD

এটা সত্যিই দুর্দান্ত - ভাল কাজ। আমি কেবল টেবিলের নাম এবং কলাম_নামের তুলনায় কম () যুক্ত করব।
টোবিয়াস অটো

4

এটি বছরের পর বছর ধরে পণ্যটিতে রয়েছে - যদিও এটি ২০১১ সালে পণ্যটিতে ছিল না।

তবে, কেবলমাত্র মডেল পৃষ্ঠায় ক্লিক করুন।

এই বৈশিষ্ট্যটি অ্যাক্সেস করতে আপনি কমপক্ষে 4.0 সংস্করণে (2013 এ প্রকাশিত) নিশ্চিত হন।

এখানে চিত্র বর্ণনা লিখুন


0

স্কয়ার বিকাশকারী প্লাগইনগুলির জন্য উপরের উত্তরে যুক্ত করতে, নীচের এক্সএমএলটি ব্যবহার করে বিদেশী কীটির সাথে সম্পর্কিত কলামটি পেতে সহায়তা করবে।

    <items>
        <item type="editor" node="TableNode" vertical="true">
        <title><![CDATA[FK References]]></title>
        <query>
            <sql>
                <![CDATA[select a.owner,
                                a.constraint_name,
                                a.table_name,
                                b.column_name,
                                a.status
                         from   all_constraints a
                         join   all_cons_columns b ON b.constraint_name = a.constraint_name
                         where  a.constraint_type = 'R'
                                and exists(
                                   select 1
                                   from   all_constraints
                                   where  constraint_name=a.r_constraint_name
                                          and constraint_type in ('P', 'U')
                                          and table_name = :OBJECT_NAME
                                          and owner = :OBJECT_OWNER)
                                   order by table_name, constraint_name]]>
            </sql>
        </query>
        </item>
    </items>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.