最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Oracle 动态SQL返回单条结果和结果集

网站源码admin3浏览0评论

Oracle 动态SQL返回单条结果和结果集

Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。试验步骤如下:

1. DDL 和 DML

/*** 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; 

2. 返回单条结果

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 ; 

3. 返回结果集

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; 

/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2012-03-20,如有侵权请联系 cloudcommunity@tencent 删除变量函数字符串oraclesql
发布评论

评论列表(0)

  1. 暂无评论