import cx_Oracle


def fetch_column_names(cursor, table_name, owner_name):

    query = """

    SELECT column_name

    FROM sys.all_tab_cols

    WHERE table_name = :table_name AND owner = :owner_name

    ORDER BY column_id

    """

    cursor.execute(query, table_name=table_name.upper(), owner_name=owner_name.upper())

    columns = [row[0] for row in cursor.fetchall()]

    return columns


def transfer_data(src_conn, dest_conn, table_name, owner_name):

    # Create cursors

    src_cursor = src_conn.cursor()

    dest_cursor = dest_conn.cursor()


    try:

        # Fetch column names

        columns = fetch_column_names(src_cursor, table_name, owner_name)

        cols_list = ', '.join(columns)

        

        # Generate SELECT query for source

        select_query = f"SELECT {cols_list} FROM {owner_name}.{table_name}"

        

        # Fetch data from source

        src_cursor.execute(select_query)

        data = src_cursor.fetchall()


        # Generate INSERT query for destination

        bind_vars = ', '.join([':' + str(i + 1) for i in range(len(columns))])

        insert_query = f"INSERT INTO {owner_name}.{table_name} ({cols_list}) VALUES ({bind_vars})"

        

        # Insert data to destination

        dest_cursor.executemany(insert_query, data)

        dest_conn.commit()

    except cx_Oracle.DatabaseError as e:

        print("Error occurred:", e)

    finally:

        src_cursor.close()

        dest_cursor.close()


# Main Execution

if __name__ == "__main__":

    src_connection = cx_Oracle.connect('user/password@production_db')

    dest_connection = cx_Oracle.connect('user/password@dev_db')


    table_name = 'YOUR_TABLE_NAME'

    owner_name = 'YOUR_OWNER_NAME'


    transfer_data(src_connection, dest_connection, table_name, owner_name)


    src_connection.close()

    dest_connection.close()


ORACLE PROD TO DEV


EXPORT

expdp username/password@prod_db schemas=your_schema directory=your_directory dumpfile=exportprod_conn_str = 'username/password@prod_host:port/prod_service_name'_renevue.dmp logfile=export.log query=tbl_name:\"WHERE column = 123\"


expdp username/password@prod_db schemas=your_schema directory=your_directory dumpfile=export_renevue.dmp logfile=export.log query=\"bb_renevue:\"\"WHERE gfcid = 123\"\"\"



IMPORT

impdp username/password@dev_db schemas=your_schema directory=your_directory dumpfile=export_renevue.dmp logfile=import.log remap_table=bb_renevue:bb_revenue_lite

impdp username/password@dev_db schemas=our_schema directory=your_directory dumpfile=export_renevue.dmp logfile=import.log remap_table=bb_renevue:bb_revenue_lite 

OR

import cx_Oracle


# Database connection parameters

prod_conn_str = 'username/password@prod_host:port/prod_service_name'

dev_conn_str = 'username/password@dev_host:port/dev_service_name'


# SQL queries

select_query = "SELECT * FROM bb_renevue WHERE gfcid = 123"

insert_query = "INSERT INTO bb_revenue_lite (columns) VALUES (:1, :2, ...)"


# Connect to the production database

prod_conn = cx_Oracle.connect(prod_conn_str)

prod_cursor = prod_conn.cursor()


# Connect to the development database

dev_conn = cx_Oracle.connect(dev_conn_str)

dev_cursor = dev_conn.cursor()


try:

    # Fetch data from production

    prod_cursor.execute(select_query)

    rows = prod_cursor.fetchall()


    # Insert data into development

    dev_cursor.executemany(insert_query, rows)

    dev_conn.commit()


except cx_Oracle.DatabaseError as e:

    print(f"Database error occurred: {e}")


finally:

    # Close the cursors and connections

    prod_cursor.close()

    dev_cursor.close()

    prod_conn.close()

    dev_conn.close()