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:='macower’;

v_2:='深圳;

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

EXECUTE IMMEDIATE str USING v_1, v_2;

commit;

end;

2. 返回单条结果(核心是rownum=1)

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;

oracle创建存储过程动态sql,Oracle存储过程使用动态SQL相关推荐

  1. oracle创建用户并授权select,oracle创建用户并授权,oracle创建用户并授权select

    oracle创建用户并授权,oracle创建用户并授权select,[转载]Oracle创建表空间.创建用户以及授权 Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创 ...

  2. oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  3. oracle 创建表空间 pcincrease,oracle建表空间 各种语句

    oracle建表空间 各种语句 在创建用户之前,先要创建表空间: 其格式为:格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小; 如: SQL& ...

  4. oracle创建多个游标,Oracle——游标的创建和使用

    游标 SQL语言是面向集合的,是对指定列的操作.如果要对列中的指定行进行操作,就必须使用游标. 当在PL/SQL块中执行查询语句(SELECT) 和数据操纵语句(DML) 时,Oracle会为其分配一 ...

  5. oracle创建联机重做日志,oracle联机重做日志文件管理!

    为保证数据库的正常操作,Oracle 服务器最少需要两个联机重做日志文件组.重做日志文件是以循环方式使用的.Oracle 服务器将对数据库所做的所有更改按顺序记录到重做日志缓冲区中.LGWR 按顺序向 ...

  6. oracle创建表语句_利用FME去拼接SQL语句并创建表

    在之前的工作中,我遇到了这么一个需求,需要将数据库内一千多个旧表按其原来表结构,重新创建对应的新表.然后对旧数据的进行处理后,存储新的数据. 不只是结构需要保持一致,还有用户.表空间.约束.备注等也需 ...

  7. oracle+创建序列自增,oracle序列详解和建立自增主键

    序列: 是oacle提供的用于产生一系列惟一数字的数据库对象.sql l 自动提供惟一的数值数据库 l 共享对象性能 l 主要用于提供主键值测试 l 将序列值装入内存能够提升访问效率spa 1.首先建 ...

  8. oracle创建表空间blocksize,oracle表空间大小的限制和DB_BLOCK_SIZE的概念

    而Oracle默认分配的为8K,也就是对应于32768M左右的空间大小,如果想继续增大表空间的话,只需要通过alter tablespace name add datafile 'path/file_ ...

  9. oracle 创建表空间 pcincrease,oracle建表空间

    在创建用户之前,先要创建表空间: 其格式为:格式:  create tablespace表间名datafile '数据文件名' size表空间大小; 如: SQL> create tablesp ...

  10. oracle创建触发器的作用,Oracle触发器简介

    在学习Oracle之前,我听说过触发器,但是我从未在工作中使用过触发器. 我认为触发器是一件神秘而困难的事,因此我没有认真研究它. 我了解了赵老师今晚谈论的触发因素,发现触发因素并不像我想的那样神秘. ...

最新文章

  1. C6678-SRIO和Virtex6-FPGA
  2. 面试题:如何理解 Linux 的零拷贝技术?
  3. 文件转换html文件失败,pandoc文档转换失败,出现错误67
  4. 少儿编程100讲轻松学python(十二)-python如何将数据写入txt
  5. 配置管理 ACM 在高可用服务 AHAS 流控降级组件中的应用场景
  6. 【杭州云栖】飞天技术汇大视频专场:全民视频时代下的创新技术之路
  7. ORACLE中创建如何创建表,并设置结构和默认值
  8. JMH性能测试,试试你代码的性能如何
  9. 队列的JS实现及广度优先搜索(BFS)的实现
  10. python基础学习-字符串
  11. oracle ora12514错误,【ORACLE】提示ORA-12514错误处理
  12. C# 读写txt文件 写txt(IO) TXT追加
  13. 简易计算器--带小数点--单片机课程设计
  14. 开机自动运行记事本病毒的删除
  15. ipython怎么安装_如何装ipython
  16. ActivityManagerService启动过程
  17. RN:真机调试无线调试
  18. 滴滴裁员2000人,员工竟然被裁出幸福感,获得员工的一致好评?
  19. 微信小程序weui在线入门教程-WeUi操作反馈-actionsheet弹出式菜单
  20. VsCode c++环境配置(最新版)

热门文章

  1. C语言程序设计--体测成绩信息管理系统
  2. 去中心化数字身份DID简介——二、一个完整的DID使用流程
  3. 高管频繁离职,创始人缺乏远见和管理数千人规模团队的能力
  4. Linux下关于物理CPU、逻辑CPU和CPU核数、超线程
  5. 基金投资学会这一篇就差不多了
  6. 信号塔机房有服务器吗,通信铁塔及机房知识
  7. 通检检测技术有限公司-TCD-提供灯具CE检测认证
  8. 6位顺序号生成_短网址是怎么生成的?代码献上
  9. 淘宝高价卖假鞋的黑店名录(商城篇*未处理篇)
  10. 【通俗易懂】从贝叶斯公式到卡尔曼滤波