执行即时语句

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_namefrom 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 子句时出现了一些问题.... 可能存在引号的问题; / 你能开始下一个问题并将你的脚本放入描述中吗?我确定有人帮助解决问题

以上是关于执行即时语句的主要内容,如果未能解决你的问题,请参考以下文章

为TensorFlow引入即时执行

linq之延迟加载和即时加载+标准查询运算符

执行即时指导

JIT即时编译

浅析 JIT 即时编译技术

Java虚拟机-即时编译器(上)