博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle中执行动态SQL(execute immediate)
阅读量:6149 次
发布时间:2019-06-21

本文共 929 字,大约阅读时间需要 3 分钟。

  hot3.png

    为实现新增功能,在表test_tbl中新增序列。序列起始值要= max(id)+1 。尝试了两种两种写法(原理一样)都报错,后来同事提醒,加了一个execute immediate ''才创建成功。

    在Oracle的PL/SQL里:

execute immediate 代替了以前Oracle8i中dbms_sql package包。它解析并马上执行动态的sql语句或非运行时创建的pl/sql块。动态创建和执行sql语句性能超前,execute immediate的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码。尽管dbms_sql仍然可用,但是推荐使用execute immediate,因为它获的收益在包之上。 

--报错脚本一:

declare

  v_seqInit number;

begin

  select to_number(max(t.id) + 1) into v_seqInit from test_tbl t;

  create sequence test_tbl_seq increment by 1 start

    with v_seqInit nomaxvalue nocycle cache 10;

  commit;

end;

--报错脚本二:

create sequence test_tbl_seq increment by 1 start

  with(select to_number(max(t.id) + 1) from test_tbl t) nomaxvalue nocycle cache 10;

 

--正确脚本:

 

declare

  v_seqInit number;

begin

  select to_number(max(t.id) + 1) into v_seqInit from test_tbl t;

  execute immediate 'create sequence test_tbl_seq increment by 1 start with ' ||

                    v_seqInit;

  commit;

end;

参考资料: 

转载于:https://my.oschina.net/MiniBu/blog/304825

你可能感兴趣的文章
常用限制input的方法
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>