Tôi mới trong PL SQL và tôi cần kiểm tra xem bảng có tồn tại trên máy chủ hay không.Kiểm tra xem bảng có tồn tại trong cơ sở dữ liệu hay không - PL SQL
Cảm ơn trước, Goran
Tôi mới trong PL SQL và tôi cần kiểm tra xem bảng có tồn tại trên máy chủ hay không.Kiểm tra xem bảng có tồn tại trong cơ sở dữ liệu hay không - PL SQL
Cảm ơn trước, Goran
bạn có thể truy vấn các tablenames
select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
select tname from tab where tname = 'TABLE_NAME';
Đâ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.
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;
@ 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. –
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
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. –
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>'
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
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