Suponiendo que se puede crear conexiones de red entre las dos bases de datos, la opción más sencilla sería la creación de un enlace de base de datos entre ellos, es decir
CREATE DATABASE LINK to_b
CONNECT TO username_on_b
IDENTIFIED BY password
USING 'tns_alias_for_b'
A continuación, puede utilizar ese enlace de base de datos para consultar datos de la base de datos B , es decir
INSERT INTO table_name(list_of_columns)
SELECT list_of_columns
FROM [email protected]_b
WHERE primary_key_value = <<some value>>;
que puede ser una declaración SQL recta, que forma parte de un procedimiento PL/SQL, o parte de una secuencia de comandos SQL * Plus. Un procedimiento 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;
cual puede ser invocado ya sea a través EXEC de SQL * Plus o por medio de un bloque PL/SQL anónimos
SQL> exec move_row_from_b(23);
BEGIN
move_row_from_b(23);
END;
O se podría escribir un SQL * Plus guió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;
Gracias, estaba buscando utilizar un enlace de base de datos, pero no estaba seguro de si era el mejor enfoque. ¿Conoces alguna forma de que pueda aceptar la entrada del usuario? Es decir. Puedo escribir "23" y selecciona la columna donde table_id = '23'? – null
@null - Agregué algunos ejemplos de llamarlo. Los scripts SQL * Plus pueden aceptar la entrada del usuario. PL/SQL no puede, sin embargo, puede llamar a un procedimiento y pasar parámetros. –
Muchas gracias, esto es exactamente lo que estaba buscando. Había visto que esto era posible, pero no estaba seguro de si era un enfoque inteligente (nunca lo había hecho antes). – null