数据库A下有个存储过程PA,数据库B下有个过程PB和表TB,TB表中只有一个字段,都是使用函数utl_raw.cast_to_raw转换过的,该字段是PB的返回值,我在A中使用PA调用PB(A与B是通过DBLINK连接的)来获取TB中的值,可传过来的值却显示为‘??’,不能正常显示。请问:通过DBLINK调用存储过程进行数交互的原理是怎样的?与同一库两存储过程调用有没有不同?先谢!
调试欢乐多
现在只想知道存储过程调用原理:比如,PA在调用PB时做了什么?是不是把PB放在本地内存下解析再送数据库服务器处理?那PB返回的记录呢,又是怎么送过来却为‘?’号的呢,要是原样送过来该是原表原始值才对,因为我用select * from TB@DBLINK是可以正常显示的?select与存储过程调用并传送数据的原理有别在哪里?谢谢!
调用pb是在远程数据库解析并处理,仅仅反馈结果给pa由于你两边字符集不一致,所以这边无法解析你的结果。select * from TB@DBLINK是可以正常显示的?
说明你的client端和本地数据库的字符集是一致的。因为你在本地要给远程这个表建立一个公共同义词。相当于本地的表。所以,建议楼主将两边数据库的字符串一致,试试看结果如何呢
------
select * from TB@DBLINK是可以正常显示的?
说明你的client端和本地数据库的字符集是一致的。因为你在本地要给远程这个表建立一个公共同义词。相当于本地的表。
-------
我的两次反回都是在同一client上运行得到的。wiler(@_@) 说是字符集的原因,那为什么select是可以正常获取的呢?
还望各位一起来讨论一下,把这个问题搞清楚搞明白,要是分不够再加,再谢!
但是select得到的是本地解析的,而通过procedure得到的是远程解析的
本地解析能不请楼上细谈?也不是说,如果是本地解析,在将server端原始表数据送过来时必然会发现字符集的不同,也就是会出现自动转换的问题,那oracle是如何做到保持不原始数据不变的呢?也是就是在本地解析之前oracle都做了什么?同样,如果在远程(也就是server端)那个字符集自然是远端的字符集,一旦解析完成,还有一个传送到client端的问题?谢谢
数据库歇一分钟会有多少损失呐另外,问题我是已经解决了,但问题是我要搞清楚原理
我是要对端按我的要求建了个视图,我在client上select得到的。
如果有知道的大哥,请不吝赐教为谢!
select得到的是本地解析的,而通过procedure得到的是远程解析的
什么叫本地解析?再请问,oracle是怎么完成在不同字符集下解析出汉字来的呢?
希望能得到详细的解释,相关技术文档也可以,谢谢!
当数据库A与数据库B的字符集不一致时就会出现问题
而lz所说的(client端)select能正常显示是因为 client端设置的字符集和数据库B的字符集一致
这样推断是否正确?请lz再核实一下吧
算了,这个问题可能搞不定了