使用 Alter 命令的 Oracle 存储过程
我正在尝试构建一个 Oracle 存储过程,它将接受表名作为参数。然后该过程将重建表上的所有索引。
我的问题是在存储过程中使用 ALTER 命令时出现错误,就好像 PLSQL 不允许该命令一样。
I am trying to build an Oracle stored procedure which will accept a table name as a parameter. The procedure will then rebuild all indexes on the table.
My problem is I get an error while using the ALTER command from a stored procedure, as if PLSQL does not allow that command.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
execute立即
语句在PL/SQL内部执行DDL。我测试了这段代码;有用。
Use the
execute immediate
statement to execute DDL inside PL/SQL.I tested this code; it works.
文档。
通过架构对象名称作为参数
Documentation.
Passing Schema Object Names As Parameters
这里有几种可能性。首先,您必须将 SQL 视为动态 SQL。其次,Oracle DDL 语句不能在事务中运行(或者,它们终止当前事务并且本身不能回滚)。这可能会影响您是否可以在存储过程中使用它们,或者可以在何处使用包含它们的存储过程。
如果以上都不适用 - 很容易有其他东西误入歧途 - 我建议发布一些代码。
Here are a couple of possibilities. First, you would have to treat the SQL as dynamic SQL. Second, Oracle DDL statements cannot be run in a transaction (or, they terminate the current transaction and cannot themselves be rolled back). This may affect whether you can use them in stored procedures, or where you can use stored procedures that contain them.
If none of the above apply at all - there could easily be something else astray - I suggest posting some code.