INSERT INTO dbt_images SELECT * FROM dbt_images@remote_db WHERE ID = p_id;
After searching for a solution I found an interesting way to get it working:
Jiri's Microblog
Basically, all you need to do is to:
1. create a local copy of the table you get the data from as
CREATE TABLE dbt_images AS SELECT * FROM dbt_images@remote_db WHERE 1 = 2;
2. create two types for storing the information
CREATE OR REPLACE TYPE object_row_type AS OBJECT ( ID NUMBER, NAME VARCHAR2 (256), image BLOB, creator NUMBER, created DATE ); /
CREATE OR REPLACE TYPE object_table_type AS TABLE OF object_row_type; /
3. create a pipelined function to get the required row
CREATE OR REPLACE FUNCTION get_remote_blob (p_id IN NUMBER) RETURN object_table_type PIPELINED IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO dbt_images SELECT * FROM dbt_images@remote_db WHERE ID = p_id; COMMIT; FOR cur IN (SELECT ID, NAME, image, creator, created FROM dbt_images) LOOP PIPE ROW (object_row_type (cur.ID, cur.NAME, cur.image, cur.creator, cur.created )); END LOOP; DELETE FROM dbt_images WHERE ID = p_id; COMMIT; RETURN; END get_remote_blob; /
Now, selecting from the function using the following SQL:
SELECT ID, image, NAME, DBMS_LOB.getlength (image) FROM TABLE (getblob (p_id));
will get that BLOB for you.
No comments:
Post a Comment