存储过程中有一条语句是EXECUTE IMMEDIATE 'CREATE TABLE TA (id integer)';当执行该存储过程时,可能会报“ORA-01031: 权限不足”的错误,但直接使用匿名块执行EXECUTE IMMEDIATE 'CREATE TABLE TA (id integer)'是成功的。
这是因为默认情况下,数据库对存储过程在编译阶段进行权限检测,数据库检测存储过程的所有者是否拥有直接赋予的权限,而不是通过一个角色等间接赋予的权限。但是在创建存储过程的时候使用了AUTHID CURRENT_USER这个选项,那么语句执行的权限将在执行过程中根据执行者的权限进行判断。
解决的方法有两个:一是直接授权用户DDL权限,二是使用AUTHID CURRENT_USER选项。
分享到:
相关推荐
Oracle中EXECUTE IMMEDIATE用法
execute immediate 用法研究 为初学者打造。
用execute immediate 执行备份恢复SQLSVR数据库
EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交 如果通过EXECUTE IMMEDIATE处理DML命令, 那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命令,
NULL 博文链接:https://wushuangyan26.iteye.com/blog/1306094
oracle动态sql之EXECUTE IMMEDIATE.docx
关于ADO调用存储过程的标准的做法:按照以下步骤进行: 1、生成并初始化一个_CommandPtr对象;... 5、使用_CommandPtr的Execute方法调用存储过程; 6、从结果中获取返回参数的值(如果有的话)。
金蝶K3插件开发调用存储过程
Pb 调用 DECLARE lpro_test PROCEDURE FOR proc_pslx; EXECUTE lpro_test ; 存储过程 CREATE PROCEDURE proc_pslx AS insert into demo(name) values('55566') GO
一、调用存储过程(无结果集返回) Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?,?) }"); ...
execute 调用无返回值存储过程 execute 调用单个返回值存储过程 execute 调用返回结果集存储过程 call 方法调用存储过程 前 言 1、关于 JdbcTemplate 的介绍、pom 依赖、DI 注入可以参考《Spring JdbcTemplate 模板...
预先用SQL语句写好并用一个指定的名称存储起来,并且这样的语句是放在数据库中的,还可以根据条件执行不同SQL语句, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成...
executesql 存储过程代码,需要的朋友可以参考下。
测试
系统存储过程,sp_executesql 语言在这里! sp_executesql 执行可以多次重用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。 语法 sp_executesql [@stmt =] stmt...
ASP调用带参数存储过程的几种方式 选择自 hxfwsk 的 Blog 关键字 存储过程 出处 作者: 讨饭猫 ASP调用带参数存储过程的几种方式 最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数...
存储过程.txt EXECUTE IMMEDIATE.txt
将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 讲到这里,可能有人要问:这么说存储...