《Oracle 存储过程中无法使用truncate语句.docx》由会员分享,可在线阅读,更多相关《Oracle 存储过程中无法使用truncate语句.docx(2页珍藏版)》请在三一办公上搜索。
Oracle 存储过程中无法使用truncate语句Oracle 存储过程中无法使用truncate语句个人分类:足行千里-克 -千里之行,始于足下!荐于测试时用的不是个人数据库。不能把测试过程发上来。 这里只能把思路写一写。问题描述:存储过程中主要包括两个逻辑块,一是将其他用户表中的数据truncate,一个是将新数据 插入到其他用户表中。 此存储过程创建、编译、单步调试都没有任何问题。但是执行完成后,发现原表中的数据没有变化。这说明此存储过程的执行中存在问题。查询错误信息记录日志表,发现确实是有错误记录。可以肯定存储过程没有被正确执行。 这时,我们可以将调用dbms_output.put_line;这个 包来获取具体的错误信息。 将此包加入到存储过程中后,执行存储过程,提示没有权限,而看报错的顺序,是truncate语句没有执行权限。 但是把truncate语句单独执行,是没有问题的。 现在我们可以将此问题定义为授予用户的role在存储过程中无效。 解决方法:1. 将truncate语句封装到表所有者用户下的存储过程A。然后让存储过程B的创建用户去调用A存储过程。 2. 在存储过程中加入AUTHID CURRENT_USER|DEFINED 然而,第二种方法不是很推荐,因为truncate其他用户的表,是需要drop any table 这个权限的。这种授权操作存在很大风险。