(转)Oracle执行字符串

declare
v_out   varchar2(50);
begin
     execute immediate 'select p_guid from c_itcomp  where rownum = 1 '   into   v_out;
     dbms_output.put_line(v_out);
end;

数据库版本必须> =oracle   8i

直接的select语句是没有用的,猜测因为select返回的是多行多列
可以执行DML,DDL等
如insert, update, create等
还可以绑定变量
如   STRSQL:= 'UPDATE   TNAME   SET   COL1=:VARIABLE1   WHERE   COLX=:VARIABLE2 ';
EXCUTE   IMMEDIATE   STRSQL   USING   VALUE1,VALUE2;

本文转载自:http://blog.sina.com.cn/s/blog_5421dfd20100r29j.html

执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句

EXECUTE IMMEDIATE -- 用法例子

1. 在PL/SQL运行DDL语句

begin
execute immediate 'set role all';
end;

2. 给动态语句传值(USING 子句)

declare
l_depnam varchar2(20) := 'testing';
l_loc varchar2(10) := 'Dubai';
begin
execute immediate 'insert into dept values (:1, :2, :3)'
using 50, l_depnam, l_loc;
commit;
end;

3. 从动态语句检索值(INTO子句)

declare
l_cnt varchar2(20);
begin
execute immediate 'select count(1) from emp'
into l_cnt;
dbms_output.put_line(l_cnt);
end;