2012-02-10 4 views
9

क्या कोई तरीका है कि मैं टेक्स्ट ऑरैकल ऑल_व्यू तालिका पर कॉलम फ़िल्टर कर सकता हूं?all_views पर "टेक्स्ट" कॉलम फ़िल्टर करें

उदाहरण के लिए:

SELECT * 
    FROM ALL_VIEWS 
    WHERE UPPER(TEXT) LIKE '%FOO%'; 

अपवाद:

ORA-00932: inconsistent datatypes: expected NUMBER got LONG 
00932. 00000 - "inconsistent datatypes: expected %s got %s" 

संपादित करें:

DESC ALL_VIEWS 
Name    Null  Type   
---------------- -------- -------------- 
OWNER   NOT NULL VARCHAR2(30) 
VIEW_NAME  NOT NULL VARCHAR2(30) 
TEXT_LENGTH    NUMBER   
TEXT      LONG()   
TYPE_TEXT_LENGTH   NUMBER   
TYPE_TEXT     VARCHAR2(4000) 
OID_TEXT_LENGTH   NUMBER   
OID_TEXT     VARCHAR2(4000) 
VIEW_TYPE_OWNER   VARCHAR2(30) 
VIEW_TYPE     VARCHAR2(30) 
SUPERVIEW_NAME   VARCHAR2(30) 
+0

क्षेत्र 'TEXT' की डेटाप्रकार है क्या .. –

+0

क्या आप संख्याओं के साथ तुलना कर रहे हैं ?? क्या आप टेबल से एक्सएक्स खोजना चाहते हैं जिनके पास 1 'टेक्स्ट' में 1 है ?? 'LIKE' फ़ील्ड को काम करने के लिए varchar() प्रकार होना चाहिए ... –

+0

क्या आप कृपया मुझे बताएं कि आप इस तालिका से क्या चाहते हैं ?? जैसे कि मैं उस कर्मचारी को ढूंढना चाहता हूं जिसे 'SUPERVIEW_NAME' में 'abc' –

उत्तर

14

आप तेज़ी से एक CLOB को परिवर्तित नहीं कर सकते कुछ चुने हुए बयान के माध्यम से दुर्भाग्य से। to_lob फ़ंक्शन INSERT कथन के साथ काम करता है, लेकिन इसका मतलब यह होगा कि आपको एक अलग तालिका सेट अप करने और to_lob का उपयोग करने में सम्मिलित करने की आवश्यकता होगी।

आप pl/sql में वर्चर में असाइनमेंट रूपांतरण कर सकते हैं, और अधिकांश समय आप पाएंगे कि all_views में text_length < 32767 है, इसलिए इसमें "अधिकतर" मामलों को शामिल किया जाएगा, हालांकि यह ठीक नहीं है चयन:

declare 

    l_search varchar2(1000) := 'union'; 
    l_char varchar2(32767); 

begin 
    for rec in (select * from all_views where text_length < 32767) 
    loop 
    l_char := rec.text; 
    if (instr(l_char, l_search) > 0) then 
     dbms_output.put_line('Match found for ' || rec.owner || '.' || rec.view_name); 
    end if; 
    end loop; 

end; 

यहां मैं स्ट्रिंग 'संघ' के लिए टेक्स्ट फ़ील्ड खोज रहा हूं।

उम्मीद है कि मदद करता है।

9

आप दुर्भाग्य एसक्यूएल में आसानी से लंबी कॉलम में हेरफेर नहीं कर सकते।

अपने वर्तमान समस्या के लिए, एक समाधान के रूप में, आप *_DEPENDENCIES विचारों इस्तेमाल कर सकते हैं सभी दृश्यों एक मेज पर निर्भर लगता है:

SELECT * 
    FROM all_dependencies 
WHERE type = 'VIEW' 
    AND referenced_owner = 'TABLE_OWNER' 
    AND referenced_name = 'YOUR_TABLE'; 
0
  1. Oracle डेवलपर रन और एक्सेल में निर्यात पर

    चयन VIEW_NAME, all_views से पाठ जहां मालिक = 'mydb'

Oracle Developer

  1. एक्सेल फ़ाइल को SQL सर्वर ([ALL_VIEWS] तालिका में आयात करें)

    का चयन करें [VIEW_NAME], [पाठ] [mydb] से। [Dbo]। [ALL_VIEWS] कहां [TEXT] की तरह '% FOO%'

संबंधित मुद्दे