您现在的位置:首页 > IT认证 > oracle认证 >

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


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

相关文章

无相关信息
更新时间2022-09-16 09:56:15【至顶部↑】
联系我们 | 邮件: | 客服热线电话:4008816886(QQ同号) | 

付款方式留言簿投诉中心网站纠错二维码手机版

电话:
付款方式   |   给我留言   |   我要纠错   |   联系我们