使用动态语句来执行(不知道回答对否,查询是可以,插入记不清了)//---------------------------
首先我们应该了解什么是动态SQL,在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句。所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。http://tech.163.com/05/0707/09/1O24HIJ400091589.html

解决方案 »

  1.   

    如果是两条单独的语句,肯定会分析两次sql语句,可以使用绑定变量3,100句都会在共享池里保存一个解析版本
    如:insert into test(f01,f02,f03,f04,f05) values (v01,v02,v03,v04,v05)
    ---v0*是变量
      

  2.   

    仔细看了一下,DML也可以的
    本地动态SQL执行DML语句。  需求:将用户输入的值插入到上例中建好的dinya_test表中。
    create or replace procedure proc_insert
    (
    id in number, --输入序号
    name in varchar2 --输入姓名
    ) as 
    str_sql varchar2(500);
    begin 
    str_sql:=’insert into dinya_test values(:1,:2)’;
    execute immediate str_sql using id,name; --动态执行插入操作
    exception 
    when others then 
    null;
    end ;
      

  3.   

    可不可以不用存储过程?kaixz(零度经纬) :变量有具体的值以后还是会留下的。还是会进行分析的。
      

  4.   

    我要用delphi进行insert。
    如果不用存储过程还有其他的办法没有?每秒100条记录。每条记录有100多字段。存储过程怎么进行接收参数?我对这块不熟。请大家帮我。谢谢!
      

  5.   

    happyct(绿叶对大树的情怀www.happy-city.com) :你说的没错。确实在v$sqlarea中只留下一条缓冲。
    但我要用delphi调用存储过程,不会要我写一个有200个参数的存储过程吧。有其他更好的办法吗?
      

  6.   

    可不可以不用存储过程?kaixz(零度经纬) :变量有具体的值以后还是会留下的。还是会进行分析的。
    Java 中可以使用 preparedStatement
    在sql语句中绑定变量delphi应该也可以吧?
      

  7.   

    happyct(绿叶对大树的情怀www.happy-city.com):但是表确实有200多列啊。那怎么分解?请指点。如果表有5个字段,可以只传一个参数到存储过程吗?请给出例子。感谢!