oracle execute immediate create,execute immediate在oracle存储过程中的使用
execute immediate 在存储过程中使用较为频繁,其作用是巨大的,下面简单介绍其基本用法
1:在存储过程中,我们知道只能使用DML语句,那么如果要使用DDL语句呢,就得使用execute
immediate。例如:
WANG@db>create
or replace procedure pro1
2
is
3
begin
4
create table table1(id int);
5
end;
6 /
Warning: Procedure created with compilation
errors.
因为没有存储过程(匿名块也一样),不能使用DDL语句,所以报错,接下来我们使用execute
immediate在存储过程中使用DDL语句
WANG@db>create or replace
procedure pro1
2
is
3
begin
4 execute immediate
'create table table1(id int)';
5 end;
6 /
Procedure created.
执行该存储过程就可以创建一个表了,但是这里要注意你的用户必须有创建表的权限,并且这个权限不是在角色里面的赋予的。否则会报错。
WANG@db>conn / as
sysdba
Connected.
SYS@db>grant create table to
wang;
Grant succeeded.
SYS@db>conn
wang/beijing
Connected.
WANG@db>exec pro1;
2:在写存储过程中,可能会碰到你查询的表是变量值,这个是时候直接使用变量是不行的,因外其会把变量名作为表名,而不是把变量值作为表名(这跟SHELL有所不同)。
例:
WANG@db>create or replace procedure
pro2
2
is
3 v_table_name
varchar2(20);
4 v_count
varchar2(20);
5
begin
6 v_table_name
:='testemp';
7 select count(*)
into v_count from v_table_name;
8
dbms_output.put_line(v_count);
9 end;
10 /
Warning: Procedure created with compilation
errors.
可以使用字符串截取你要是使用的SQL语句,在使用execute immediate
这个SQL实现该功能,这里需要说明的是普通的存储过程是通过select xxx into yyy from zz
来进行赋值的,但是使用execute immediate是使用execute immediate sql into
zz来进行复制的。
例如:使用exexute immediate 来实现上面的功能
WANG@db>create or replace procedure
pro2
2
is
3
v_table_name varchar2(20);
4
v_count number;
5
v_sql varchar2(100);
6
begin
7
v_table_name:='testemp';
8
v_sql:='select count(*) from '
|| v_table_name;
9
execute immediate v_sql into v_count;
10
dbms_output.put_line(v_count);
11
end;
12
/
Procedure created.
WANG@db>exec pro2;
PL/SQL procedure successfully completed.
WANG@db>set serverout on
WANG@db>exec pro2;
14
这跟SHELL里面是不一样的,我们看到在使用DML语句后面接变量时,其不会使用变量的值,但是在SEHLL里面是使用的、,例如:
脚本内容:
[oracle@ogg_source /home/oracle]$cat test.sh
#!/bin/bash
table_name=testemp
fun(){
table_name=$1
sqlplus -s wang/beijing <<
EOF
set feedback off pagesize 0 linesize 200
select count(*) from $table_name;
exit;
EOF
}
main(){
v_count=`fun $table_name`
echo $v_count
}
main
执行结果:
[oracle@ogg_source /home/oracle]$sh test.sh
14
oracle execute immediate create,execute immediate在oracle存储过程中的使用相关推荐
- oracle创建存储过程设置变量,oracle建游标变量包,且在存储过程中使用
--建包 createorreplacepackage PA_BGYZB as type sp_cursor is ref cursor; end PA_BGYZB; --存储过程调用包 create ...
- 在存储过程中调用execute immediate 执行 create table语句报TBR-17004: Permission denied
错误描述: 在存储过程中调用execute immediate 执行 create table语句报错TBR-17004 权限不正确,但是直接执行该语句不报错. SQL> conn sys/ti ...
- oracle execute immediate create,ORACLE EXECUTE IMMEDIATE 用法详解
最近工作中有用到存储过程,关于存储过程其中EXECUTE IMMEDIATE在实际开发中用到的还是比较多的 于是乎就把自己在用到时存在的用法及问题在这里总结一下: 如果在存储过程中 有需要创建表格 更 ...
- oracle execute存过,存储过程中慎用 execute immediate
存储过程中慎用 execute immediate , execute immediate 执行DDL语句一定要小心,否则会造成数据一至性问题. [@more@] 1, create table t1 ...
- mongo报错:not authorized on bb to execute command { create: \“xxx\“...}
mongo报错: {"ok" : 0,"errmsg" : "not authorized on bb to execute command { cr ...
- oracle create user identified by,Oracle system用户忘记密码的解决方法
Oracle system用户是大家经常用到的,下面就为您介绍Oracle system用户在忘记密码情况下的解决方法,如果您在使用Oracle system用户时遇到过类似的问题,不妨一看. SQL ...
- python连接oracle数据库的方法_Python3.6连接Oracle数据库的方法详解
本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://pypi.python.org/pypi/cx_Ora ...
- oracle 触发器登录,【学习笔记】Oracle触发器 实现指定用户登录oracle案例
天萃荷净 触发器实现指定用户登录oracle,分享一篇关于Oracle数据库安全策略,通过Oracle触发器实现限定user用户登录Oracle数据库的方法 1.创建允许登录用户表 CREATE TA ...
- oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志
logminer和配置 安装logminer 以sqlplus / as sysdba登录系统数据库系统,ORACLE默认安装logminer,如果没有安装,执行SQL脚本安装 --安装logmine ...
最新文章
- shell编程基础之基本文本工具集合
- Boost 编译链接
- DiscuzX2.5视频教程
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历(BFS)
- 史上最全的常用事件:移动端事件及PC端:鼠标/键盘/表单事件
- 创建一个简单的数据库
- 算法笔记_083:蓝桥杯练习 合并石子(Java)
- 微星P55-主板是怎样造出来的
- oracle查询第二个字为a,Oracle中SQL语句学习二(like,转义,order by)
- hprose php用户手册,04 协程 - 《Hprose for PHP 用户手册》 - 书栈网 · BookStack
- tornado 源码分析 waker
- Windows 编程基础(四)
- 判断星期的方法(已知1900年1月1日是星期一)
- Cesium 源码解析 Model(二)
- 使用Source Insight查看编辑源代码
- 1.3寸 SH1106 OLED 屏幕驱动 基于stm32
- 解决QQ群文件未通过安全检测无法下载问题
- matlab标定工具箱 使用,关于 matlab 标定工具箱的使用 | 学步园
- spring boot新闻管理系统 毕业设计源码211113
- 火狐浏览器无法启动java_打开火狐浏览器出现错误
热门文章
- 创建模板只有从空白html文档开始创建,小陈半夜吃泡面,为什么一面吃,一面眼盯着表?...
- 正负样本的定义、划分以及用于loss的计算的过程
- 一个计算机视觉PhD大佬的毕业随感
- NLP自然语言处理学习笔记(一)(转自咕泡AI)
- p53 激活剂 ALK 抑制剂联合治疗--神经母细胞瘤
- Fiddler安卓APP抓包显示tunnel to
- 上海电力大学研究生计算机技术历年分数线,2019上海电力大学研究生分数线(以及历年复试)...
- Jupyter debugger安装
- scp 传送数据的几种方式
- NOIP2018TG题解