执行即时语句
Posted
技术标签:
【中文标题】执行即时语句【英文标题】:Execute immediate statement 【发布时间】:2015-10-30 09:50:09 【问题描述】:我正在尝试使用execute immediate
语句将数据插入表中。但我得到一个错误
FROM keyword not found where expected
谁能看看有什么问题?
declare
c1 SYS_REFCURSOR;
v_tabl_name varchar2(30);
begin
open c1 for
select tablename from table1;
LOOP
FETCH c1 INTO v_tabl_name;
EXIT WHEN c1%NOTFOUND;
execute immediate 'insert tabl2(tabl_name) (select ''tem'' from'||v_tabl_name||')' ;
END LOOP;
close c1;
end;
【问题讨论】:
在 from (select ''tem'' from '||v_tabl_name||' 之后留出空格,并在插入语句中使用 into 子句。 对,我在 from... 后面放了空格,但它可以工作 :) 谢谢。我不知道为什么我把没有“into”子句的代码放在哪里。 如果你仔细想想,这并不奇怪。这是fromtable_name
和from table_name
之间的区别。一个语法正确,一个不正确……
没错 :) 谢谢解释
其他执行立即语句仍有问题...执行立即'select count(*) into v_zmienna from user_tables where table_name =||'''||v1_tabl_name||'';我怎么能那样做?假设引号有问题...
【参考方案1】:
create table table1(tem varchar2(50), tablename varchar2(50));
create table tabl2(tabl_name varchar2(50));
insert into table1(tem, tablename) values ('table1','table1');
begin
for rc in (select tablename from table1) loop
--dbms_output.put_line('insert into tabl2(tabl_name) (select ''tem'' from '||rc.tablename||')');
execute immediate 'insert into tabl2(tabl_name) (select ''tem'' from '||rc.tablename||')' ;
end LOOP;
end;
【讨论】:
其他执行立即语句仍有问题...执行立即'select count(*) into v_zmienna from user_tables where table_name =||'''||v1_tabl_name||'';我怎么能那样做?假设引号有问题......我真的很困惑 您需要将局部变量作为参数传递给立即执行,请参阅此链接***.com/questions/20615600/… 我当然做到了,声明 v1_table_name varchar2(30)。但是当我想将该变量用于“table_name”时,就会出现一些问题。当我将它用作例如。立即执行“插入”||v1_table_name|| (...) - 它工作得很好,但是当我试图将它放入 where 子句时出现了一些问题.... 可能存在引号的问题; / 你能开始下一个问题并将你的脚本放入描述中吗?我确定有人帮助解决问题以上是关于执行即时语句的主要内容,如果未能解决你的问题,请参考以下文章