ORACLE动态SQL

原创 2007年09月20日 15:47:00
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 numberreturn myrctype; 
end pkg_test; 
/ 

CREATE OR REPLACE package body pkg_test as 
--函数体 
function get(intID numberreturn 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; 
/
 

oracle关于动态SQL的使用

  • 2008年02月25日 10:08
  • 117KB
  • 下载

oracle 动态SQL

  • 2008年10月29日 10:53
  • 73KB
  • 下载

在oracle存储过程中执行动态sql

create or replace procedure pr_zhaozhenlong_strsql /* 名称:在存储过程中执行动态sql 功能:动态创建、删除表;       动态修改表结...
  • macrobn
  • macrobn
  • 2014年06月09日 10:22
  • 477

Oracle数据库技术——动态SQL

  • 2008年03月20日 09:02
  • 148KB
  • 下载

ORACLE培训第三篇-动态SQL编写

  • 2008年12月21日 14:00
  • 33KB
  • 下载

Oracle中动态SQL详解

Oracle中动态SQL详解 1.静态SQLSQL与动态SQL   Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就...

用动态SQL方法4连接Oracle的实现

  • 2004年01月06日 00:00
  • 118KB
  • 下载

Oracle的动态SQL

原文:http://space.itpub.net/26622598/viewspace-718134 在PLSQL中使用EXECUTE IMMEDIATE语句处理动态SQL语句。 语法如下: ...
  • fw0124
  • fw0124
  • 2011年10月05日 21:19
  • 9248

ORACLE 动态SQL中的多个单引号

今天在项目中遇到动态拼sql的语句, 语句如下: v_sql := 'update Table_Test t '         ||' set t.field1 = ''' || 变量1 ...

oracle存储过程定义游标用动态sql

1.执行存储过程的sql脚本 execute PROC_AUTHORIZESAVE('News'); 2.存储过程 CREATE OR REPLACE PROCEDURE PROC_AUTH...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE动态SQL
举报原因:
原因补充:

(最多只允许输入30个字)