oracle创建存储过程动态sql,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:='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相关推荐
- oracle创建用户并授权select,oracle创建用户并授权,oracle创建用户并授权select
oracle创建用户并授权,oracle创建用户并授权select,[转载]Oracle创建表空间.创建用户以及授权 Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创 ...
- oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...
创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...
- oracle 创建表空间 pcincrease,oracle建表空间 各种语句
oracle建表空间 各种语句 在创建用户之前,先要创建表空间: 其格式为:格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小; 如: SQL& ...
- oracle创建多个游标,Oracle——游标的创建和使用
游标 SQL语言是面向集合的,是对指定列的操作.如果要对列中的指定行进行操作,就必须使用游标. 当在PL/SQL块中执行查询语句(SELECT) 和数据操纵语句(DML) 时,Oracle会为其分配一 ...
- oracle创建联机重做日志,oracle联机重做日志文件管理!
为保证数据库的正常操作,Oracle 服务器最少需要两个联机重做日志文件组.重做日志文件是以循环方式使用的.Oracle 服务器将对数据库所做的所有更改按顺序记录到重做日志缓冲区中.LGWR 按顺序向 ...
- oracle创建表语句_利用FME去拼接SQL语句并创建表
在之前的工作中,我遇到了这么一个需求,需要将数据库内一千多个旧表按其原来表结构,重新创建对应的新表.然后对旧数据的进行处理后,存储新的数据. 不只是结构需要保持一致,还有用户.表空间.约束.备注等也需 ...
- oracle+创建序列自增,oracle序列详解和建立自增主键
序列: 是oacle提供的用于产生一系列惟一数字的数据库对象.sql l 自动提供惟一的数值数据库 l 共享对象性能 l 主要用于提供主键值测试 l 将序列值装入内存能够提升访问效率spa 1.首先建 ...
- oracle创建表空间blocksize,oracle表空间大小的限制和DB_BLOCK_SIZE的概念
而Oracle默认分配的为8K,也就是对应于32768M左右的空间大小,如果想继续增大表空间的话,只需要通过alter tablespace name add datafile 'path/file_ ...
- oracle 创建表空间 pcincrease,oracle建表空间
在创建用户之前,先要创建表空间: 其格式为:格式: create tablespace表间名datafile '数据文件名' size表空间大小; 如: SQL> create tablesp ...
- oracle创建触发器的作用,Oracle触发器简介
在学习Oracle之前,我听说过触发器,但是我从未在工作中使用过触发器. 我认为触发器是一件神秘而困难的事,因此我没有认真研究它. 我了解了赵老师今晚谈论的触发因素,发现触发因素并不像我想的那样神秘. ...
最新文章
- C6678-SRIO和Virtex6-FPGA
- 面试题:如何理解 Linux 的零拷贝技术?
- 文件转换html文件失败,pandoc文档转换失败,出现错误67
- 少儿编程100讲轻松学python(十二)-python如何将数据写入txt
- 配置管理 ACM 在高可用服务 AHAS 流控降级组件中的应用场景
- 【杭州云栖】飞天技术汇大视频专场:全民视频时代下的创新技术之路
- ORACLE中创建如何创建表,并设置结构和默认值
- JMH性能测试,试试你代码的性能如何
- 队列的JS实现及广度优先搜索(BFS)的实现
- python基础学习-字符串
- oracle ora12514错误,【ORACLE】提示ORA-12514错误处理
- C# 读写txt文件 写txt(IO) TXT追加
- 简易计算器--带小数点--单片机课程设计
- 开机自动运行记事本病毒的删除
- ipython怎么安装_如何装ipython
- ActivityManagerService启动过程
- RN:真机调试无线调试
- 滴滴裁员2000人,员工竟然被裁出幸福感,获得员工的一致好评?
- 微信小程序weui在线入门教程-WeUi操作反馈-actionsheet弹出式菜单
- VsCode c++环境配置(最新版)