Giả sử rằng bạn có thể tạo các kết nối mạng giữa hai cơ sở dữ liệu, tùy chọn đơn giản nhất là tạo ra một liên kết cơ sở dữ liệu giữa chúng, tức là
CREATE DATABASE LINK to_b
CONNECT TO username_on_b
IDENTIFIED BY password
USING 'tns_alias_for_b'
Sau đó bạn có thể sử dụng liên kết cơ sở dữ liệu để truy vấn dữ liệu từ cơ sở dữ liệu B , tức là
INSERT INTO table_name(list_of_columns)
SELECT list_of_columns
FROM [email protected]_b
WHERE primary_key_value = <<some value>>;
Đó có thể là câu lệnh SQL thẳng, một phần của thủ tục PL/SQL hoặc một phần của tập lệnh SQL * Plus. Một thủ tục PL/SQL
CREATE OR REPLACE PROCEDURE move_row_from_b(
p_key_value IN table_name.primary_key%type
)
AS
BEGIN
INSERT INTO table_name(list_of_columns)
SELECT list_of_columns
FROM [email protected]_b
WHERE primary_key_value = p_key_value;
END move_row_from_b;
mà có thể được gọi hoặc thông qua EXEC từ SQL * Plus hoặc thông qua một khối ẩn danh PL/SQL
SQL> exec move_row_from_b(23);
BEGIN
move_row_from_b(23);
END;
Hoặc bạn có thể viết một SQL * Plus kịch bản
variable key_value number;
accept key_value prompt 'Enter key: '
INSERT INTO table_name(list_of_columns)
SELECT list_of_columns
FROM [email protected]_b
WHERE primary_key_value = :key_value;
Nguồn
2011-07-05 18:25:20
Cảm ơn, tôi chỉ đang xem xét sử dụng liên kết cơ sở dữ liệu, nhưng không chắc đó có phải là cách tiếp cận tốt nhất hay không. Bạn có biết cách tôi có thể làm cho nó chấp nhận đầu vào của người dùng không? I E. Tôi có thể gõ vào "23" và nó chọn cột nơi table_id = '23'? – null
@null - Đã thêm một vài ví dụ về việc gọi nó. Các kịch bản lệnh SQL * Plus có thể chấp nhận đầu vào của người dùng. PL/SQL không thể mặc dù bạn có thể gọi thủ tục và truyền tham số. –
Cảm ơn rất nhiều điều này là chính xác những gì tôi đang tìm kiếm. Tôi đã thấy rằng điều này là có thể, nhưng không chắc đó có phải là cách tiếp cận thông minh hay không (chưa bao giờ thực hiện nó trước đây). – null