2014-06-18 14 views
7

Nếu tôi biết tên của mỗi cột trong bảng chứ không phải tên của bảng, làm cách nào để tìm tên của bảng tôi cần?Oracle SQL: Làm cách nào để tìm tên bảng được đặt tên cột?

+0

Không chắc nhưng nếu COLUMN_NAMES khóa chính cho mỗi bảng là duy nhất sau đó bạn có thể có thể thử truy cập vào siêu dữ liệu của cơ sở dữ liệu và tìm kiếm thông qua các bảng? – ncdreamy

Trả lời

10

Hãy thử điều này (một cột biết):

CREATE TABLE mytab(mycol VARCHAR2(30 CHAR));

SELECT table_name FROM user_tab_columns WHERE column_name='MYCOL';

Note MYCOL là trong trên trường hợp trong column_name='MYCOL';

Chúc mừng!

+1

Có các chế độ xem khác: USER_TAB_COLS, ALL_TAB_COLS, ALL_TAB_COLUMNS. Tùy thuộc vào đặc quyền truy cập của bạn, chúng cũng có sẵn: DBA_TAB_COLS, DBA_TAB_COLUMNS – Roobie

12

Dựa trên giải pháp @ Roobie, mã bên dưới tìm kiếm trong tất cả các lược đồ mà bạn có quyền truy cập, trong trường hợp bảng không nằm trong lược đồ của riêng bạn. Cũng đã thêm đối sánh phân biệt chữ hoa chữ thường.

SELECT owner, table_name 
    FROM all_tab_columns 
    WHERE UPPER(column_name) = UPPER('MYCOL'); 
+0

Hey Josh, chỉnh sửa đẹp. Tôi nghĩ bạn không cần UPPER ở phía bên tay trái (UPPER (column_name)). Chúc mừng! – Roobie

+2

@Roobie, 99,8% thời gian, nhưng luôn có khả năng mã nguồn nhà cung cấp mã điên (suy nghĩ của một ứng dụng được thiết kế cho SQL Server mà nhà cung cấp đã tạo ra một phiên bản Oracle). Bạn có thể tạo cột trường hợp hỗn hợp trong Oracle, mặc dù bạn không nên. Ví dụ: 'CREATE TABLE stupid_table (" MixedCaseColumn "chìa khóa PRIMARY INTEGER); Đặt 'UPPER' ở cả hai bên bao gồm mông của bạn cho gần 100% trường hợp. Đối với một tiếng cười tốt, xem fiddle này tôi chỉ cần đặt lại với nhau: http://sqlfiddle.com/#!4/2840e/1/0 –

+0

Oh. Có quan điểm của bạn. Chúc mừng – Roobie

-4
select * from all_updatable_columns where column_name like 'reqd col name'; 
Các vấn đề liên quan