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存储过程中的使用相关推荐

  1. oracle创建存储过程设置变量,oracle建游标变量包,且在存储过程中使用

    --建包 createorreplacepackage PA_BGYZB as type sp_cursor is ref cursor; end PA_BGYZB; --存储过程调用包 create ...

  2. 在存储过程中调用execute immediate 执行 create table语句报TBR-17004: Permission denied

    错误描述: 在存储过程中调用execute immediate 执行 create table语句报错TBR-17004 权限不正确,但是直接执行该语句不报错. SQL> conn sys/ti ...

  3. oracle execute immediate create,ORACLE EXECUTE IMMEDIATE 用法详解

    最近工作中有用到存储过程,关于存储过程其中EXECUTE IMMEDIATE在实际开发中用到的还是比较多的 于是乎就把自己在用到时存在的用法及问题在这里总结一下: 如果在存储过程中 有需要创建表格 更 ...

  4. oracle execute存过,存储过程中慎用 execute immediate

    存储过程中慎用 execute immediate , execute immediate 执行DDL语句一定要小心,否则会造成数据一至性问题. [@more@] 1, create table t1 ...

  5. mongo报错:not authorized on bb to execute command { create: \“xxx\“...}

    mongo报错: {"ok" : 0,"errmsg" : "not authorized on bb to execute command { cr ...

  6. oracle create user identified by,Oracle system用户忘记密码的解决方法

    Oracle system用户是大家经常用到的,下面就为您介绍Oracle system用户在忘记密码情况下的解决方法,如果您在使用Oracle system用户时遇到过类似的问题,不妨一看. SQL ...

  7. python连接oracle数据库的方法_Python3.6连接Oracle数据库的方法详解

    本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://pypi.python.org/pypi/cx_Ora ...

  8. oracle 触发器登录,【学习笔记】Oracle触发器 实现指定用户登录oracle案例

    天萃荷净 触发器实现指定用户登录oracle,分享一篇关于Oracle数据库安全策略,通过Oracle触发器实现限定user用户登录Oracle数据库的方法 1.创建允许登录用户表 CREATE TA ...

  9. oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志

    logminer和配置 安装logminer 以sqlplus / as sysdba登录系统数据库系统,ORACLE默认安装logminer,如果没有安装,执行SQL脚本安装 --安装logmine ...

最新文章

  1. shell编程基础之基本文本工具集合
  2. Boost 编译链接
  3. DiscuzX2.5视频教程
  4. 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历(BFS)
  5. 史上最全的常用事件:移动端事件及PC端:鼠标/键盘/表单事件
  6. 创建一个简单的数据库
  7. 算法笔记_083:蓝桥杯练习 合并石子(Java)
  8. 微星P55-主板是怎样造出来的
  9. oracle查询第二个字为a,Oracle中SQL语句学习二(like,转义,order by)
  10. hprose php用户手册,04 协程 - 《Hprose for PHP 用户手册》 - 书栈网 · BookStack
  11. tornado 源码分析 waker
  12. Windows 编程基础(四)
  13. 判断星期的方法(已知1900年1月1日是星期一)
  14. Cesium 源码解析 Model(二)
  15. 使用Source Insight查看编辑源代码
  16. 1.3寸 SH1106 OLED 屏幕驱动 基于stm32
  17. 解决QQ群文件未通过安全检测无法下载问题
  18. matlab标定工具箱 使用,关于 matlab 标定工具箱的使用 | 学步园
  19. spring boot新闻管理系统 毕业设计源码211113
  20. 火狐浏览器无法启动java_打开火狐浏览器出现错误

热门文章

  1. 创建模板只有从空白html文档开始创建,小陈半夜吃泡面,为什么一面吃,一面眼盯着表?...
  2. 正负样本的定义、划分以及用于loss的计算的过程
  3. 一个计算机视觉PhD大佬的毕业随感
  4. NLP自然语言处理学习笔记(一)(转自咕泡AI)
  5. p53 激活剂 ALK 抑制剂联合治疗--神经母细胞瘤
  6. Fiddler安卓APP抓包显示tunnel to
  7. 上海电力大学研究生计算机技术历年分数线,2019上海电力大学研究生分数线(以及历年复试)...
  8. Jupyter debugger安装
  9. scp 传送数据的几种方式
  10. NOIP2018TG题解