编程论坛's Archiver

cgping 发表于 2007-9-12 17:51

如何在Oracle存储过程里实现SQL局部动态查询

<P>我在存储过程里有个SQL语句要用到表变量,就是表名是动态的,但是由于我那SQL语句长度太长,也比较复杂,如果整个SQL语句用动态执行的话以后维护会比较麻烦,我想只实行表名的动态处理,请问各位该怎么做?</P>
[align=right][color=#000066][此贴子已经被作者于2007-9-12 17:54:01编辑过][/color][/align]

ILoveMK 发表于 2007-9-13 23:07

<P>SQL&gt; begin<BR>  2  insert into &amp;table values('马六');<BR>  3  end;<BR>  4  /<BR>输入 table 的值:  test<BR>原值    2: insert into &amp;table values('马六');<BR>新值    2: insert into test values('马六');</P>
<P>PL/SQL 过程已成功完成。</P>
<P>SQL&gt; select * from test;</P>
<P>COLA<BR>----------<BR>张三<BR>李四<BR>王五<BR>马六</P>

cgping 发表于 2007-9-14 12:44

<P>这位大侠的意思是为表定义一个变量test,可是要怎么定义表变量?总体在存储过程里连起来要怎么写?在存储过程里如果直接用select * from 表标量,编译就通不过了.对了,我是Oracle里的.请指点!非常感谢</P>

ILoveMK 发表于 2007-9-14 13:21

<P>你是指这样么:</P>
<P>SQL&gt; create or replace procedure test_pro(table_name varchar2) as<BR>  2  text varchar2(100);<BR>  3  begin<BR>  4  text:='insert into '||table_name||' values(''田七'')';<BR>  5  execute immediate text;<BR>  6  end;<BR>  7  /</P>
<P>过程已创建。</P>
<P>SQL&gt; call test_pro('test');</P>
<P>调用完成。</P>
<P>SQL&gt; select * from test;</P>
<P>COLA<BR>----------<BR>张三<BR>李四<BR>王五<BR>马六<BR>田七</P>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.