Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。

  1. DDL 和 DML

    Sql代码 收藏代码

    /*** DDL ***/

    begin

    EXECUTE IMMEDIATE 'drop table temp_1';

    EXECUTE IMMEDIATE 'create table temp_1(name varchar2(8))';

    end;

/*** DML ***/

declare

v_1 varchar2(8);

v_2 varchar2(10);

str varchar2(50);

begin

v_1:='测试人员';

v_2:='北京';

str := 'INSERT INTO test (name ,address) VALUES (:1, :2)';

EXECUTE IMMEDIATE str USING v_1, v_2;

commit;

end;

  1. 返回单条结果

    Sql代码 收藏代码

    declare

    str varchar2(500);

    c_1 varchar2(10);

    r_1 test%rowtype;

    begin

    c_1:='测试人员';

    str:='select * from test where name=:c WHERE ROWNUM=1';

    execute immediate str into r_1 using c_1;

    DBMS_OUTPUT.PUT_LINE(R_1.NAME||R_1.ADDRESS);

    end ;

  2. 返回结果集

Sql代码 收藏代码

CREATE OR REPLACE package pkg_test as

/* 定义ref cursor类型

不加return类型,为弱类型,允许动态sql查询,

否则为强类型,无法使用动态sql查询;

*/

type myrctype is ref cursor;

--函数申明
function get(intID number) return myrctype;

end pkg_test;

/

CREATE OR REPLACE package body pkg_test as

--函数体

function get(intID number) return myrctype is

rc myrctype; --定义ref cursor变量

sqlstr varchar2(500);

begin

if intID=0 then

--静态测试,直接用select语句直接返回结果

open rc for select id,name,sex,address,postcode,birthday from

student;

else

--动态sql赋值,用:w_id来申明该变量从外部获得

sqlstr := 'select id,name,sex,address,postcode,birthday from student

where id=:w_id';

--动态测试,用sqlstr字符串返回结果,用using关键词传递参数

open rc for sqlstr using intid;

end if;

    return rc;
end get;

end pkg_test;

/

自定义函数动态执行SQL语句的更多相关文章

  1. 使用exec和sp_executesql动态执行SQL语句(转载)

    当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,个人觉得用得比较多的地方就是分页存储过程和执行搜索查询的SQL语句.一个比较通用的分页存储过程,可能需要传入表名, ...

  2. 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...

  3. 动态执行SQL语句,接收返回值

    一.exec和sp_executesql介绍 当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句.比如,一个比较通用的分页存储过程,可能需要传入表名,字段,过滤条件, ...

  4. sp_executesql动态执行sql语句并将结果赋值给一变量

    需求场景: 需动态拼接sql语句进行执行,并将执行的结果赋值给一指定变量. 样例代码如下: SELECT @tableName = TAB_NAME FROM dbo.NMR_BLYWBDY WHER ...

  5. ORACLE 查询不走索引的原因分析,解决办法通过强制索引或动态执行SQL语句提高查询速度

    (一)索引失效的原因分析: <>或者单独的>,<,(有时会用到,有时不会) 有时间范围查询:oracle 时间条件值范围越大就不走索引 like "%_" ...

  6. 动态执行SQL语句

    在实际制作过程中,需要动态的拼接SQL语句然后执行.具体代码如下: declare @columnName varchar(20),@tempName varchar(20) select @temp ...

  7. mysql 存储过程动态执行sql语句

    之前经常在程序中拼接sql语句,其实我们也可以在存储过程中拼接sql 语句,动态的执行~~ 代码如下: DROP PROCEDURE IF EXISTS SearchByDoctor;CREATE P ...

  8. [转]ORACLE 动态执行SQL语句

    本文转自:http://zhaisx.iteye.com/blog/856472 Oracle 动态SQLOracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediat ...

  9. ORACLE 动态执行SQL语句

    本文转自 http://zhaisx.iteye.com/blog/856472 Oracle 动态SQL Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immedia ...

随机推荐

  1. css3-文字旋转

    <meta charset="utf-8"/><style> * {margin: 0; padding: 0;} ul { height: 80px; b ...

  2. php笔记(二)PHP类和对象之Static静态关键字

      PHP类和对象之Static静态关键字 静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用. class Car { pr ...

  3. HttpGet和HttpPost的区别

    HttpGet和HttpPost的区别总结就是下面这样: Get一般用于从服务器取数据,而且不改变原来的内容: Post一般用于向服务器传递数据,这需要改变服务器的内容. 从安全性上考虑,Get的安全 ...

  4. group by 和count 联合使用问题

    工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来统计的数量和想要的数量不正确. count统计的数量是被group by 分组以后每一组中数据的数量 ...

  5. asp 301代码

    <% if request.ServerVariables("HTTP_HOST")="ksfmjy.com" then Response.Status= ...

  6. Myeclipse启动错误

    问题描述: Errors occurred during the build.Errors running builder 'DeploymentBuilder' on project 'szoa'. ...

  7. 新建HomeController控制器 继承BaseController

    CRC这个缩略词,在我看来可以有两种理解:一种是Cyclic Redundancy Check,即循环冗余检错技术:另一种则是Cyclic Redundance Code,即循环冗余校检码.在计算机网 ...

  8. Redis字符串类型相关操作命令

    string是redis最基本的类型,可以包括任何类型数据,如jpg图片或者序列化对象. 单个value最大上限是1G字节 如果只使用string类型,redis就可以被看做具有持久化特性的memca ...

  9. java中的传值

    关于java中到底是传值还是传应用,有以下笔记: Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用 ...

  10. 《JavaScript高级程序设计》读书笔记 ---RegExp 类型

    ECMAScript 通过RegExp 类型来支持正则表达式.使用下面类似Perl 的语法,就可以创建一个正则表达式.var expression = / pattern / flags ; 其中的模 ...