2012-02-10 34 views
9

Có cách nào tôi có thể lọc cột văn bản trên oracle all_views bảng?Cột "văn bản" trên all_views

Ví dụ:

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

Ngoại lệ:

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

Edit:

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

là những gì datatype của trường 'văn bản' .. –

+0

những gì bạn đang so sánh với các con số sau đó ?? bạn có muốn tìm XX từ bảng có 1 trong 'TEXT' của họ không? Để làm việc lĩnh vực 'LIKE' phải được varchar() loại ... –

+0

bạn có thể xin vui lòng cho tôi biết chính xác những gì bạn muốn ra khỏi bảng này? như tôi muốn tìm nhân viên mà 'SUPERVIEW_NAME' chứa' abc' –

Trả lời

14

Bạn không thể chuyển đổi sang một clob khi đang bay qua một tuyên bố chọn không may. Hàm to_lob làm việc với các câu lệnh INSERT, nhưng điều đó có nghĩa là bạn cần phải thiết lập một bảng riêng biệt và chèn vào sử dụng to_lob.

Bạn có thể chuyển đổi chuyển đổi thành varchar trong pl/sql và hầu hết thời gian bạn sẽ thấy rằng text_length trong all_views là < 32767, do đó, trường hợp này sẽ bao gồm "hầu hết" trường hợp, mặc dù nó không đẹp chọn:

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; 

Ở đây tôi đang tìm kiếm trường văn bản cho chuỗi 'công đoàn'.

Hy vọng điều đó sẽ hữu ích.

9

Bạn không thể thao tác cột DÀI dễ dàng trong SQL không may.

Đối với vấn đề hiện tại của bạn, như một cách giải quyết, bạn có thể sử dụng *_DEPENDENCIES xem để tìm tất cả các quan điểm phụ thuộc vào một bảng:

SELECT * 
    FROM all_dependencies 
WHERE type = 'VIEW' 
    AND referenced_owner = 'TABLE_OWNER' 
    AND referenced_name = 'YOUR_TABLE'; 
0
  1. On Oracle Developer chạy và xuất khẩu sang Excel

    CHỌN view_name, văn bản từ all_views nơi chủ sở hữu = 'mydb'

Oracle Developer

  1. Nhập tệp Excel vào SQL Server (tới [ALL_VIEWS] bảng)

    CHỌN [VIEW_NAME], [TEXT] FROM [MyDB]. [Dbo]. [ALL_VIEWS] ĐÂU [TEXT] LIKE '% FOO%'

Các vấn đề liên quan