回答

收藏

在Oracle分布式数据库中处理LOB的最佳方法

技术问答 技术问答 223 人阅读 | 0 人回复 | 2023-09-14

如果创建Oracle dblink,则无法直接访问目标表中的LOB列。' j' r% {8 a9 U* \; u+ ?* m
例如,使用以下命令创建一个dblink:& n7 m5 ]) r' B4 z8 Q: b6 \
create database link TEST_LINK
8 M4 i  o! |5 N5 Z2 Y  connect to TARGETUSER IDENTIFIED BY password using 'DATABASESID';9 W5 i1 E- ^, O8 [& b) k; D
之后,您可以执行以下操作:
2 c; F! x( E5 L. a! [select column_a, column_b
) q7 s5 d( n+ Y( `from data_user.sample_table@TEST_LINK
/ K7 ]% n) Y5 P, V4 f除非该列是LOB,否则您将收到错误:: r; v0 ^/ I2 I2 F6 q9 z2 P5 X, Y
ORA-22992: cannot use LOB locators selected from remote tables/ D5 W5 y; X7 m1 r) W
这是有据可查的限制。
3 p7 @9 y! i9 q5 P+ U0 _2 i: S5 @同一页上建议您将值提取到本地表中,但这有点…杂乱无章:
9 |3 B. p  Z+ X2 H3 C! j; |# t& U# kCREATE TABLE tmp_hello
0 H* p$ {% \8 H8 q+ h1 EAS SELECT column_a ( {1 E$ K- }# V' J
from data_user.sample_table@TEST_LINK
! I; z/ S) w* M还有其他想法吗?# G" U0 p% Q( w+ l6 }$ R4 Y
                9 g% I2 [8 M; i, [; \7 T
解决方案:, A& w1 L% T! ]1 v, E& L
                  O3 N8 B+ y, h7 x  @# U. K' J2 c
' \- e5 @3 L) P
! q: {4 _3 N$ B- r5 J: O
                是的,这很混乱,不过我想不出办法避免这种情况。
/ y7 L3 a# P, @4 o8 o7 P0 _( f您可以通过将临时表创建放入存储过程中(并使用“立即执行”来创建它们)表来隐藏客户端的一些混乱情况,2 a2 X8 `4 {, p  C
您需要注意的一件事是临时表(如果失败)在会话进行到一半之前,没有时间清理它)-您可以安排一个oracle作业来定期运行并删除所有剩余的表。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则