书写存储过程遇到的问题(后续添加中。。。。)
1。。。基本上是格式还有细节有小问题
拿上面的图说一下吧,这很明显是一个有参存储,
1.刚开始参数外面没写括号(低级错误)
2.还有标点符号要注意大小写的问题
3.其他的暂时还没碰上,碰上再补充.
接着上图进行存储的调用吧(附图):
调用结果(附图):
2.这里再说一下一个好玩的符号(=>): 这个像小箭头是指定参数名称调用。
此部分使用 “参数默认值”那一小节的存储过程。
用于说明当最后2个参数是有默认的时候,如何跳过中间那个
实际运用:比如数据库有四个字段吧,有一个字段呢预设好了默认值,我实际操作的话可以通过=>来跳过这个字段,就是这个意思
3.再说一下我们需要输入值的时候碰到的问题。
点运行后跳出输出框,到这一步都没问题2333,随意输入10,出现错误提示
这里说一下:怎么回事呢,正确的写法是v_age int := &no,意思是将用户输入的数字赋值给左边的v_age变量,我写成了
v_age := &no,没有给变量规定值类型,故报错!
4.今天下午看到前辈写的一段存储过程,硬是没看懂(附图)
就是红框中的insert into ...select...from(将源表插入目标表),乍一看,一脸懵比,上网一查,
准确的说是数据拷贝(说高大上点:数据迁移)
大概操作:先根据主表(想进行数据迁移的表t1),创建出现在的表t2(字段保持一致):
insert into t2() select * from t1
commit;
如果想将t2的表在复制出去成t3:
create table t3 as select * from t2;
还有一个select into.....from(将源表插入目标表):
例子:
select * into target_table from source_table;
insert into target_table(column1,column2) select column1,5 from source_table;
以上两句都是将源表source_table的记录插入到目标表target_table,但两句又有区别。
第一句(select into from)要求目标表target_table不存在,因为在插入时会自动创建。
第二句(insert into select from)要求目标表target_table存在,由于目标表已经存在,
所以我们除了插入源表source_table的字段外,还可以插入常量,如例中的:5。
流程控制语句
5.Oracle的条件语句case when then...end case
6.Oralce数据库的内置存储过程[指用户自定义的异常错误信息](-20000--20999)
RAISE_APPLCATION_ERROR();
7.Oralce数据库的事务处理语句
1.commit
2.rollback
3.save point:保存点(savepoint)是事务处理过程中的一个标志,和回滚命令(rollback)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务,这在pl/sql研发中还是非常有用处的。
如图:
示范用例:
下面的例子中,把savepoint标记在insert语句之前,如果这条insert语句试图将重复的数据保存到emp表中的话,将触发执行预先定义的dup_val_on_index例外处理,在这里面的rollback to do_insert命令将回滚上面的那条insert操作,而不会影响前面的所有操作。
declare
emp_id emp.empno%type;
begin
update emp set ... where empno = emp_id;
delete from emp where ...
...
savepoint do_insert;
insert into emp values (emp_id, ...);
exception
when dup_val_on_index then
rollback to do_insert;
end;
如果你定义了多个savepoint,当你指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了n个savepoint)。例如,在一段处理中
你定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用rollback to savepoint_name而使用rollback,将会滚整个事务处理。
如果你在递归子程式里面定义了一个savepoint, 如果每一个递归层都设置了savepoint. 此时, 你只能回滚到最近的一个savepoint.
savepoint的声明能在同一个事务处理里面重复定义. 他的作用就是把savepoint从上一个位置转移到目前的位置. 因而,执行回滚也只回滚到最近的savepoint.
下面是个例子:
begin
...
savepoint my_point;
update emp set ... where empno = emp_id;
...
savepoint my_point; -- move my_point to current point
insert into emp values (emp_id, ...);
exception
when others then
rollback to my_point;
end;
另外,oracle没有对每个session里面能使用的savepoint个数做限制.
8.ORACLE NO_DATA_FOUND的三种处理方法,如果需要将表中的值赋给变量,一般采取这种形式:
sql代码如下:
select col
into v_col
FROM t_table
WHERE condition
如果找不到数据,就会有数据找不到的异常,此时有三种方法解决:
1.普通的异常捕获的方式
2.通过表关联left join的方式
3.通过max的方式
方法一:sql代码:
BEGIN
SELECT col
INTO v_col
FROM t_table
WHERE condition
EXCEPTION WHEN NO_DATA_FOUND THEN
do omething
END;
方法二:语法:
sql代码:
select nvl(b.col,自定义的默认值) into v_col
form(select 1 rn from dual)a
left join(
SELECT col,rownum rn
FROM t_table
WHERE condition
)b on a.rn = b.rn
方法三 语法:
sql代码:
SELECT max(col)INTO v-col
FROM t_table
WHERE condition
9.plsql中特有的循环语句和操作符
四处箭头:
1.<<next>>:loop循环的标签,可以对标签本身进行操作,例如:goto next:就是使其跳出loop循环
2.end loop:结束loop循环
3.=>:plsql中传参的一种方法
4.Descerr:与平台进行操作互动的信息.
下附上友情链接
网上供应链业务
书写存储过程遇到的问题(后续添加中。。。。)相关推荐
- mysql insert 主键冲突_在MySql中建立存储过程和解决insert into select 中主键冲突的有关问题...
首先说需求,我想重复插入大量数据,那么首先想到的,就是用insert into select语句. 但是因为mysql中没有将主键设为自增长,导致每次都会报主键冲突的错误,插入失败. 对于这个问题,就 ...
- 【二叉树】根据后续和中序遍历输出前序遍历 [建树+非建树做法]
F . 案例 4-1.1:根据后续和中序遍历输出前序遍历 Description 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果. Input 第一行给出正整数N (≤3 ...
- python正则匹配空格+数字+空格_如何批量添加中文和英文数字之间的空格?用正则表达式吧...
1.中文与英文数字混合使用,排版有规范 写作中,我们经常遇到以下中文与英文.数字混用的情况. 我自学python编程,是在xue.cn上进行的.时耗方面,基础功仅需50多小时,加上很多实战,包括初步运 ...
- 免费将中文视频转换为英文视频并添加中英双语字幕
免费将中文视频转换为英文视频并添加中英双语字幕 背景 女朋友需要找关于<不要随意喂养动物园的动物>的英语视频,因为限定是英语类的视频,所以在国内的视频平台基本无法找到.虽然我是个程序员,但 ...
- conda 添加中科大源
conda中清华源好像不能用了 可以添加中科大源 conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ ...
- Asp.net(C#)面试100+题陆续添加中……
我收集的面试题以及自己对一些面试题的理解: 1.C#不支持多重继承,可以通过接口实现. 2.public 全部公开 private 类内部 protected 自己和自己的子类 ...
- mysql中存储过程另存为_转: MySQL中的存储过程
转: https://www.cnblogs.com/chenpi/p/5136483.html 阅读目录 什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类 ...
- 常用sql 全记录(添加中)
-- 数据库SQL总结中........... --SQL分类: (CREATE,ALTER,DROP,DECLARE) ---DDL-数据定义语言 (SELECT,DELETE,UPDATE,IN ...
- 框架如何调用存储过程_如何在FastReport.Net中使用存储过程
在本文中,我们将讨论使用存储过程来检索报表的数据,使用MS SQL示例,将展示如何在报表中创建和使用函数.Transact SQL允许创建存储过程和函数,存储过程用于自动执行任何操作,这些功能旨在扩展 ...
最新文章
- SQL——一种简单的基于角色控制的权限管理数据库设计DEMO
- 解决Jenkins邮件配置问题
- 匿名函数自我调用_Python中的匿名函数及递归思想简析
- 朋友圈消失的人,都在偷偷读哪些书?
- 【Linux基础】查看硬件信息-CPU
- linux 踢出在线用户
- Python案例:求满足条件的人数
- python如何创建一个列表,在python中创建一个由列表索引的字典
- android sepolicy报错解决
- 基于单片机智能交通灯控制系统设计外文文献_三种典型的微机控制系统
- 【搜素算法02】—回溯法
- ACM1008玛雅日历
- 技术:车牌识别摄像机的应用,无人值守洗车房解决方案
- jzojs 100047. 【NOIP2017提高A组模拟7.14】基因变异
- zerglurker的C语言教程010——运算符详解(二)
- 【Grafana】【一】Grafana 简介
- 信号完整性设计的五个问题
- java hgetall_详解Java使用Pipeline对Redis批量读写(hmsethgetall)
- h.265不是视频压缩技术未来的5个原因
- TOEIC考试时间分配详解
热门文章
- xilinx vivado 2019 驱动问题,Connecting to hw_server url TCP:localhost:3121,jtag连接不上
- VOIP业务仿真建模,使用间歇泊松过程模型,能够图形显示业务的突发特性
- 用VS 2008开发WCF(一)——最快速的WCF入门
- SAPPHIRE NOW阿里云 - 国内传播
- dotweb——go语言的一个微型web框架(二)启动dotweb
- 为何终端防护对ICS如此重要
- Shadow of Survival
- Visual Studio使用技巧,创建自己的代码片段
- Sun x4500作为文件服务器的调优
- rebar Erlang构建工具(转)