关于在存储过程中立即执行

Posted

技术标签:

【中文标题】关于在存储过程中立即执行【英文标题】:Regarding Execute Immediate in stored procedure 【发布时间】:2010-03-02 03:57:34 【问题描述】:

我从存储过程中得到以下语句。它给予的权限不足。 但是,如果我从 sql 提示符单独运行 create 语句,它正在创建表。

    execute immediate 'create table TEST_ABC(
                    NO_AC NUMBER(8) 
                    , ILL_PER VARCHAR2(15)
                    , INIT_C DATE
                    )';

需要做什么才能通过立即从存储过程执行来创建表。不知道它是如何在 sql 命令提示符下工作的

【问题讨论】:

你是否使用同一个用户执行存储过程? 【参考方案1】:

过程不会继承通过角色授予的权限。更多信息here。请检查您是否遇到了这种情况。

解决此问题的一种方法是将“CREATE TABLE”权限直接授予拥有该过程的帐户。

【讨论】:

【参考方案2】:

程序是由同一个用户创建的吗?如果它是由其他人创建的,而您只有 EXECUTE 权限,则错误是正确的(假设创建过程没有AUTHID CURRENT USER 子句)。

你能创建任何其他表吗?如果可以,那就有问题了。我们需要更多细节来分析。

【讨论】:

以上是关于关于在存储过程中立即执行的主要内容,如果未能解决你的问题,请参考以下文章

在 netezza 存储过程中立即执行不会向表中插入值

动态调用存储过程(立即执行)输出参数问题

PL/SQL中测试存储过程,如何立即输出DBMS_OUTPUT的语句。

关于存储过程

关于MYSQL 存储过程的文章摘录

sqlserver 2008 关于存储过程中的临时表。