【发布时间】:2014-02-09 13:26:47
【问题描述】:
我想在过程中创建一个表。我试图将创建查询放在一个字符串中,然后立即执行该字符串。例如:
create or replace procedure hr.temp is
var1 varchar2(4000);
begin
var1:='create table hr.temp(
id number)';
execute immediate var1;
end temp;
但是当我执行这个过程时,我得到了错误:
ORA-00911:无效字符
ORA-06512:在“SYS.TEMP”第 6 行
.
.
.
有什么办法可以做到吗?
【问题讨论】:
-
在 SYS 帐户中不创建过程。不要这样做。曾经。 (一旦将该过程移至适当的帐户:在动态 SQL 中,您不得指定
;字符。无论如何,立即执行只能执行一条语句,因此不需要终止字符) -
由于您的建议,我将其更改为 hr 架构,但结果是一样的
-
我删除了
;字符,现在当我执行程序时,它开始但永远不会结束,就像程序在永远不会结束的循环中! -
您的示例仍然包括
;。顺便说一句:您不能创建与现有过程同名的表。但除此之外,这应该可以正常工作:sqlfiddle.com/#!4/37847/2 -
@jalalrasooly 过程和表的名称应该是不同的,而不是相同的。你都改成
temp2了吗?
标签: sql oracle stored-procedures create-table