2012-01-05 22 views

Trả lời

5

Sử dụng SYSCAT.COLUMNS catalog view:

SELECT TABNAME 
FROM SYSCAT.COLUMNS 
WHERE 
    TABNAME IN ('table name 1', 'table name 2') AND 
    COLNAME = 'column_name'; 
8

Thử nghiệm trên DB2 z/OS 9.1 và LUW 9.7:

SELECT STRIP(TBCREATOR) || '.' || STRIP(TBNAME) 
FROM SYSIBM.SYSCOLUMNS 
WHERE NAME = 'your_col' 
    AND TBNAME IN ('list', 'of', 'tables') 

Nếu bạn chỉ muốn kết quả từ một schema cụ thể mà bạn có thể thêm vào AND TBCREATOR = 'your_schema' đến khi kết thúc truy vấn.

+0

Cảm ơn câu trả lời, tôi muốn kiểm tra các bảng từ một Lược đồ cụ thể. Tôi đã thử thêm dòng bạn đề xuất nhưng nhiệm vụ trả về không có gì (tôi đã cho nó tên của một cột mà tôi biết tồn tại). Bạn có thể giải thích cho tôi thêm một chút về cách truy vấn hoạt động không? Cảm ơn –

+0

Xin lỗi typo: quest is * request –

+0

Điều gì có thể khiến bạn khó chịu là bạn không thêm lược đồ vào phần 'TBNAME' của mệnh đề where. Ví dụ: giả sử bạn đang tìm một cột có tên là 'UPDATE_TIMESTAMP' có thể nằm trong' SCH.TAB1' hoặc 'SCH.TAB2' và bạn nghĩ rằng nó có thể nằm trong' SCH.TAB3' (nhưng không phải). Truy vấn của bạn sẽ là 'SELECT STRIP (TBCREATOR) || '.' || STRIP (TBNAME) TỪ SYSIBM.SYSCOLUMNS WHERE NAME = 'UPDATE_TIMESTAMP' VÀ TBNAME IN ('TAB1', 'TAB2', 'TAB3') VÀ TBCREATOR = 'SCH'' – bhamby

0

Một cách khác để làm điều này là với xử lý lỗi:

declare v_sql varchar(1000); 
declare col_missing integer default 0; 
declare col_does_not_exist condition for sqlstate '42703'; 
declare continue handler for col_does_not_exist set col_missing = 1; 

set v_sql = 'select table.foo from table'; 
execute immediate v_sql; 

if col_missing = 1 then 
    --Do something if column foo doesn't exist. 
end if; 

Phương pháp này sẽ làm việc trên bảng phiên, và bạn cũng có thể sử dụng nó trên một đối tượng ngay cả khi bạn không biết cho dù đó là một bảng , xem, bí danh, vv

Điều quan trọng là chỉ định table.foo thay vì chỉ tên cột, nếu không thì sự tồn tại của đối tượng khác (chẳng hạn như biến) được gọi là foo sẽ phá vỡ thử nghiệm.

Trình xử lý tiếp tục này sẽ che dấu bất kỳ lỗi nào khác cho các cột bị thiếu trong phạm vi, vì vậy tốt nhất nên giới hạn phạm vi chỉ là thử nghiệm bạn muốn thực hiện.

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