নির্দিষ্ট কলামের নাম সহ টেবিলগুলির জন্য একটি ওরাকল ডাটাবেস অনুসন্ধান করবেন?


95

আমাদের অনেকগুলি টেবিল সহ একটি বিশাল ওরাকল ডাটাবেস রয়েছে। নির্দিষ্ট কলামের নাম সহ কোনও সারণী আছে কিনা তা অনুসন্ধান করার জন্য আমি কী কীভাবে জিজ্ঞাসা বা অনুসন্ধান করতে পারি?

IE আমাকে সমস্ত টেবিল প্রদর্শন করুন যাতে কলাম রয়েছে: id, fname, lname, address

বিশদটি আমি যুক্ত করতে ভুলে গেছি: আমার বিভিন্ন স্কিমার মাধ্যমে অনুসন্ধান করতে সক্ষম হওয়া দরকার। সংযোগের জন্য আমাকে অবশ্যই যে টেবিলগুলি অনুসন্ধান করতে হবে সেগুলির নিজস্ব নয়।

উত্তর:


201

একটি নির্দিষ্ট কলাম সহ সমস্ত সারণী সন্ধান করতে:

select owner, table_name from all_tab_columns where column_name = 'ID';

4 টি কলামের যে কোনও একটি বা সমস্ত রয়েছে এমন সারণীগুলি সন্ধান করতে:

select owner, table_name, column_name
from all_tab_columns
where column_name in ('ID', 'FNAME', 'LNAME', 'ADDRESS');

সমস্ত 4 কলাম রয়েছে এমন টেবিলগুলি সন্ধান করতে (কোনওটিই নিখোঁজ নেই):

select owner, table_name
from all_tab_columns
where column_name in ('ID', 'FNAME', 'LNAME', 'ADDRESS')
group by owner, table_name
having count(*) = 4;

4
এই অনুসন্ধানটি করার জন্য আপনার সম্ভবত ALL_TAB_COLUMNS এর পরিবর্তে DBA_TAB_COLUMNS ব্যবহার করা উচিত, যদি আপনি যে ব্যবহারকারীকে লগ ইন করছেন তাতে কিছু টেবিলের অ্যাক্সেস না থাকে সে ক্ষেত্রে।
জেফ্রি কেম্প

সত্য, তবে কেবলমাত্র যদি আপনি ব্যবহারকারী হিসাবে সংযুক্ত থাকেন তবে কোনও টেবিলে অধিকার নির্বাচন করুন।
টনি অ্যান্ড্রুজ

4
আপনি যদি সঠিক নামটি সম্পর্কে নিশ্চিত না হন তবে column_name+ যোগ করুন like:select owner, table_name, column_name from all_tab_columns where column_name like 'someField%';
মাইক আর

11

কোনও কলামের নাম অনুসন্ধান করতে নীচের ক্যোয়ারীটি ব্যবহার করুন যদি আপনি কলামটির নামটি সঠিকভাবে জানেন:

select owner,table_name from all_tab_columns where upper(column_name) =upper('keyword');

নীচের সঠিক কলামের ব্যবহারটি যদি আপনি না জানেন তবে একটি কলামের নাম অনুসন্ধান করতে:

select owner,table_name from all_tab_columns where upper(column_name) like upper('%keyword%');

10

আপনি যে ডেটা চান তা হ'ল "কলস" মেটা-ডেটা টেবিলের মধ্যে রয়েছে:

SELECT * FROM COLS WHERE COLUMN_NAME = 'id'

এটি আপনাকে এমন টেবিলগুলির একটি তালিকা দেবে যাতে আপনি চান সমস্ত কলাম রয়েছে:

select distinct
  C1.TABLE_NAME
from
  cols c1
  inner join
  cols c2
  on C1.TABLE_NAME = C2.TABLE_NAME
  inner join
  cols c3
  on C2.TABLE_NAME = C3.TABLE_NAME
  inner join
  cols c4
  on C3.TABLE_NAME = C4.TABLE_NAME  
  inner join
  tab t
  on T.TNAME = C1.TABLE_NAME
where T.TABTYPE = 'TABLE' --could be 'VIEW' if you wanted
  and upper(C1.COLUMN_NAME) like upper('%id%')
  and upper(C2.COLUMN_NAME) like upper('%fname%')
  and upper(C3.COLUMN_NAME) like upper('%lname%')
  and upper(C4.COLUMN_NAME) like upper('%address%')  

অন্য কোনও স্কিমাতে এটি করতে, কেবল সারণীর সামনে স্কিমাটি নির্দিষ্ট করুন

SELECT * FROM SCHEMA1.COLS WHERE COLUMN_NAME LIKE '%ID%';

যদি আপনি অনেকগুলি স্কিমার অনুসন্ধানগুলি এক আউটপুট ফলাফলের সাথে সংযুক্ত করতে চান তবে আপনি এটি করতে পারেন:

SELECT DISTINCT
  'SCHEMA1' AS SCHEMA_NAME
 ,TABLE_NAME
FROM SCHEMA1.COLS
WHERE COLUMN_NAME LIKE '%ID%'
UNION
SELECT DISTINCT
  'SCHEMA2' AS SCHEMA_NAME
 ,TABLE_NAME
FROM SCHEMA2.COLS
WHERE COLUMN_NAME LIKE '%ID%'

আমি কীভাবে এটি অন্য স্কিমা দেখতে ব্যবহার করব? (আমি আমার মূল প্রশ্নে সেই প্রশ্নটি উল্লেখ করতেই ভুলে গেছি)
ডেভিড ওনিল

প্রতিটি টেবিলের নামের সম্মুখভাগে কেবল স্কিমা নামটি প্রিপেন্ড করুন ... অর্থাত্ myschema.c1। স্পষ্টতই আপনার অবশ্যই অন্য স্কিম
wadesworld

SELECT * FROM COLSআমার স্কিমা থেকে কিছুই ফিরিয়ে দেয় না। আমার কেবলমাত্র টেবিলগুলিতে নির্বাচন করার সুযোগ রয়েছে। আমাকে সিএলএস এর মাধ্যমে দেখার অনুমতি দেওয়ার পক্ষে পর্যাপ্ত পরিমাণটি নির্বাচন করবেন না?
ডেভিড ওনিল

select * from schema1.colsআমাকে একটি table or view does not existত্রুটি দেয় সুযোগগুলি কীভাবে সেট আপ করা হয় তার সাথে কী তা করতে হবে?
ডেভিড ওনিল

হ্যাঁ এটা হবে. দেখে মনে হচ্ছে টনি অ্যান্ড্রুয়ের উত্তর সম্ভবত আপনার পরিস্থিতির জন্য ভাল। আমি "সমস্ত_ট্যাব_কলামগুলি" দৃশ্যটি ভুলে গিয়েছিলাম।
জোসেফস্টাইন্স 13

0

এখানে আমরা সন্ধান করেছি cc.lq এ সংরক্ষণ করেছি যাতে এসকিউএলপ্লাসের মধ্যে থেকে আমরা এটিকে সহজে চালাতে পারি

set verify off
clear break
accept colnam prompt 'Enter Column Name (or part of): '
set wrap off
select distinct table_name, 
                column_name, 
                data_type || ' (' || 
                decode(data_type,'LONG',null,'LONG RAW',null,
                       'BLOB',null,'CLOB',null,'NUMBER',
                       decode(data_precision,null,to_char(data_length),
                              data_precision||','||data_scale
                             ), data_length
                      ) || ')' data_type
  from all_tab_columns
 where column_name like ('%' || upper('&colnam') || '%');
set verify on
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.