概述
历程
- 触发器
在使用oracle时,当前用户是 A,发现往 B 用户的 table01 表取数据,然后再往B的这张表插数据时,突然报错了。
ORA-06502: PL/SQL: 数字或值错误 :
字符串缓冲区太小
ORA-06512: 在 "B.table01", line 3
百度之后,了解到可能是因为字段设置得太小,然后填入的数据长度太长导致的,接着我去查看 B 用户的 table01 的那个字段大小,发现大小设置为了 256 ,而我填入的数据长度仅为200,却仍然报这个错误。接着我去问了某某大佬,发现是这个字段设有触发器。
-- 查询某表的所有触发器(在该表的隶属用户下查询)
select * from all_triggers where table_name='xxxx';
这个触发器的作用是将填入的数据经过一个自定义的加密函数处理,才放入数据库中,我填入的数据长度是200,被触发器处理之后数据长度就超过了256 ,所以就会报这样的错误。
-- 查询B表下的自定义函数
SELECT * FROM ALL_OBJECTS WHERE OWNER = 'B' and OBJECT_TYPE = 'FUNCTION';
- 函数
回到我一开始的操作:
当前用户是 A,发现往 B 用户的 table01 表取数据,然后再往B的这张表插数据时,突然报错了。
从 table01 中读取数据,然后又写回 table01 中,竟然会报这样的错误,这是因为我读取数据的时候没有经过解密处理,便将取出的加密数据又写回去。
那么我应该在读取table01的数据时,使用另一个自定义的解密函数处理数据,但问题又来了,我所在的用户为A,而且要使用的自定义函数隶属用户为B,A用户没有访问权限。
所以要把B的函数使用授权给用户A(A在使用该函数时,要写用户前缀:B.functionName(xxx) )
-- 将函数的使用授权给其他用户(functionName为函数名)
grant execute on B.functionName to A;
最后
以上就是野性御姐为你收集整理的【oracle】 记一次与触发器,函数的奇妙历程的全部内容,希望文章能够帮你解决【oracle】 记一次与触发器,函数的奇妙历程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复