উদ্ধৃতি:
আমি নীচে এই বিবৃতিটি ব্যবহার করার চেষ্টা করেছি যা আমি মনে করি এটির নামকরণ করা উচিত তার উপর ভিত্তি করে একটি উপযুক্ত কলামটি সন্ধান করতে কিন্তু এটি কোনও ফল দেয়নি *
SELECT * from dba_objects WHERE
object_name like '%DTN%'
একটি কলাম একটি অবজেক্ট নয়। যদি আপনি বোঝাতে চান যে কলামের নামটি '% ডিটিএন%' এর মতো হবে, আপনি যে ক্যোয়ারীটি চান তা হ'ল:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
তবে 'ডিটিএন' স্ট্রিংটি যদি আপনার পক্ষ থেকে কেবল অনুমান করা হয় তবে এটি সম্ভবত সাহায্য করবে না।
যাইহোক, আপনি কীভাবে নিশ্চিত যে '1/22 / 2008P09RR8' একটি কলাম থেকে সরাসরি নির্বাচিত একটি মান? এটি কোথা থেকে আসছে তা আপনি যদি না জানেন তবে এটি বেশ কয়েকটি কলামের সংমিশ্রণ বা কোনও ফাংশনের ফলাফল বা নেস্টেড টেবিল অবজেক্টে বসে থাকা মান হতে পারে। সুতরাং আপনি কোনও বুনো হাঁস তাড়া করে সেই মানটির জন্য প্রতিটি কলাম চেক করার চেষ্টা করছেন। ক্লায়েন্ট অ্যাপ্লিকেশন যা এই মানটি প্রদর্শিত হচ্ছে তা দিয়ে আপনি কি শুরু করতে পারবেন না এবং এটিটি জিজ্ঞাসা করার জন্য এটি কী জিজ্ঞাসাটি ব্যবহার করছে তা আবিষ্কার করার চেষ্টা করবেন না?
যাইহোক, ডিকিউর উত্তরটি প্রতিটি টেবিলের প্রতিটি কলামকে মানের জন্য পরীক্ষা করতে এসকিউএল কোয়েরি উত্পন্ন করার একটি পদ্ধতি দেয়। আপনি একইভাবে পিএল / এসকিউএল ব্লক এবং গতিশীল এসকিউএল ব্যবহার করে একটি এসকিউএল সেশনে সম্পূর্ণ একই জিনিস করতে পারেন। তার জন্য এখানে কিছু তাড়াতাড়ি লিখিত কোড দেওয়া হল:
SET SERVEROUTPUT ON SIZE 100000
DECLARE
match_count INTEGER;
BEGIN
FOR t IN (SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE owner <> 'SYS' and data_type LIKE '%CHAR%') LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
' WHERE '||t.column_name||' = :1'
INTO match_count
USING '1/22/2008P09RR8';
IF match_count > 0 THEN
dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
END IF;
END LOOP;
END;
/
কিছু উপায় রয়েছে যা আপনি এটিকে আরও দক্ষ করে তুলতে পারেন।
এই ক্ষেত্রে, আপনি যে মানটিটি খুঁজছেন তা প্রদত্ত, আপনি স্পষ্টভাবে যে কোনও কলামটি NUMBER বা তারিখের ধরণের মুছে ফেলতে পারেন, যা প্রশ্নের সংখ্যা হ্রাস করবে। এমনকি এটি এমন কলামগুলিতে সীমাবদ্ধও করতে পারে যেখানে প্রকারটি '% CHAR%' এর মতো।
প্রতি কলামে একটি ক্যোয়ারীর পরিবর্তে, আপনি টেবিলের জন্য এই জাতীয় একটি কোয়েরি তৈরি করতে পারেন:
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;