2010-08-19 75 views

Trả lời

12

bạn có thể truy vấn các tablenames

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR'; 
+0

Lưu ý rằng tên bảng phải là chữ hoa ngay cả khi bạn đã tạo bảng không có chữ hoa. – Elmue

7
select tname from tab where tname = 'TABLE_NAME'; 
4

Đây là nơi mà sức mạnh thực sự của giản đồ thông tin đi kèm trong. Một truy vấn đơn giản sẽ chỉ cho bạn đúng hướng

SELECT 
    * 
FROM 
    information_schema.tables 
WHERE 
    table_name='salesorders'; 

Điều này sau đó có thể b e sử dụng trong chức năng plpg

CREATE OR REPLACE FUNCTION table_exists(v_table text) 
    RETURNS boolean AS 
$BODY$ 
    DECLARE 
    v_count int; 
    v_sql text; 
BEGIN 
    v_sql = 
    'SELECT ' || 
    ' count(1) ' || 
    'FROM ' || 
    ' information_schema.tables ' || 
    'WHERE ' || 
    E' table_name=\'' || v_table || E'\''; 

    EXECUTE v_sql INTO v_count; 

    RETURN v_count>0; 
END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE 
    COST 100; 

Sử dụng chức năng

select * from table_exists('salesordesrs'); 

Đó nên là đủ để giúp bạn đi.

OOPS Dường như tôi đã hiểu sai câu hỏi áp phích ban đầu. Tôi đã trả lời cho PostgreSQL.

Peter.

3

Phương pháp hiệu quả nhất là, đừng. Chỉ cần thả bảng. Nếu bảng không tồn tại, nó sẽ gây ra một ngoại lệ.

Chạy truy vấn ngay trước khi thả bảng chỉ là lãng phí thời gian làm những gì Oracle sẽ tự động thực hiện cho bạn.

Bạn có thể xử lý các ngoại lệ tuy nhiên bạn muốn, ví dụ .:

BEGIN 
    EXECUTE IMMEDIATE 'DROP TABLE "MYTABLE"'; 
EXCEPTION 
    WHEN OTHERS THEN 
    IF SQLCODE = -942 THEN 
     DBMS_OUTPUT.put_line('the table did not exist!'); 
    ELSE 
     RAISE; 
    END IF; 
END; 
+0

@ user428955: không, điều đó sẽ không hoạt động - một biến liên kết không thể được sử dụng cho tên bảng. –

+0

Bạn có chắc chắn không? http://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems017.htm dường như không đồng ý với bạn. – KJP

+0

vâng, tôi chắc chắn. Không có gì trong liên kết đó gợi ý rằng * tên bảng * có thể được cung cấp trong một biến liên kết. –

1

tôi đã có một số rắc rối với các giải pháp trên, như DB của tôi có một cấu trúc cây đặc biệt. Điều này sẽ cung cấp cho mọi bảng trong lược đồ của bạn:

SELECT 
    table_name 
FROM 
    all_tables 
WHERE 
    table_name = '<your table here>' 
+0

Lưu ý rằng tên bảng phải là chữ hoa ngay cả khi bạn đã tạo bảng không có chữ hoa. – Elmue

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