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:与平台进行操作互动的信息.

下附上友情链接

网上供应链业务

书写存储过程遇到的问题(后续添加中。。。。)相关推荐

  1. mysql insert 主键冲突_在MySql中建立存储过程和解决insert into select 中主键冲突的有关问题...

    首先说需求,我想重复插入大量数据,那么首先想到的,就是用insert into select语句. 但是因为mysql中没有将主键设为自增长,导致每次都会报主键冲突的错误,插入失败. 对于这个问题,就 ...

  2. 【二叉树】根据后续和中序遍历输出前序遍历 [建树+非建树做法]

    F . 案例 4-1.1:根据后续和中序遍历输出前序遍历 Description 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果. Input 第一行给出正整数N (≤3 ...

  3. python正则匹配空格+数字+空格_如何批量添加中文和英文数字之间的空格?用正则表达式吧...

    1.中文与英文数字混合使用,排版有规范 写作中,我们经常遇到以下中文与英文.数字混用的情况. 我自学python编程,是在xue.cn上进行的.时耗方面,基础功仅需50多小时,加上很多实战,包括初步运 ...

  4. 免费将中文视频转换为英文视频并添加中英双语字幕

    免费将中文视频转换为英文视频并添加中英双语字幕 背景 女朋友需要找关于<不要随意喂养动物园的动物>的英语视频,因为限定是英语类的视频,所以在国内的视频平台基本无法找到.虽然我是个程序员,但 ...

  5. conda 添加中科大源

    conda中清华源好像不能用了 可以添加中科大源 conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ ...

  6. Asp.net(C#)面试100+题陆续添加中……

    我收集的面试题以及自己对一些面试题的理解: 1.C#不支持多重继承,可以通过接口实现. 2.public 全部公开     private 类内部     protected 自己和自己的子类     ...

  7. mysql中存储过程另存为_转: MySQL中的存储过程

    转: https://www.cnblogs.com/chenpi/p/5136483.html 阅读目录 什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类 ...

  8. 常用sql 全记录(添加中)

    -- 数据库SQL总结中........... --SQL分类:  (CREATE,ALTER,DROP,DECLARE) ---DDL-数据定义语言 (SELECT,DELETE,UPDATE,IN ...

  9. 框架如何调用存储过程_如何在FastReport.Net中使用存储过程

    在本文中,我们将讨论使用存储过程来检索报表的数据,使用MS SQL示例,将展示如何在报表中创建和使用函数.Transact SQL允许创建存储过程和函数,存储过程用于自动执行任何操作,这些功能旨在扩展 ...

最新文章

  1. SQL——一种简单的基于角色控制的权限管理数据库设计DEMO
  2. 解决Jenkins邮件配置问题
  3. 匿名函数自我调用_Python中的匿名函数及递归思想简析
  4. 朋友圈消失的人,都在偷偷读哪些书?
  5. 【Linux基础】查看硬件信息-CPU
  6. linux 踢出在线用户
  7. Python案例:求满足条件的人数
  8. python如何创建一个列表,在python中创建一个由列表索引的字典
  9. android sepolicy报错解决
  10. 基于单片机智能交通灯控制系统设计外文文献_三种典型的微机控制系统
  11. 【搜素算法02】—回溯法
  12. ACM1008玛雅日历
  13. 技术:车牌识别摄像机的应用,无人值守洗车房解决方案
  14. jzojs 100047. 【NOIP2017提高A组模拟7.14】基因变异
  15. zerglurker的C语言教程010——运算符详解(二)
  16. 【Grafana】【一】Grafana 简介
  17. 信号完整性设计的五个问题
  18. java hgetall_详解Java使用Pipeline对Redis批量读写(hmsethgetall)
  19. h.265不是视频压缩技术未来的5个原因
  20. TOEIC考试时间分配详解

热门文章

  1. xilinx vivado 2019 驱动问题,Connecting to hw_server url TCP:localhost:3121,jtag连接不上
  2. VOIP业务仿真建模,使用间歇泊松过程模型,能够图形显示业务的突发特性
  3. 用VS 2008开发WCF(一)——最快速的WCF入门
  4. SAPPHIRE NOW阿里云 - 国内传播
  5. dotweb——go语言的一个微型web框架(二)启动dotweb
  6. 为何终端防护对ICS如此重要
  7. Shadow of Survival
  8. Visual Studio使用技巧,创建自己的代码片段
  9. Sun x4500作为文件服务器的调优
  10. rebar Erlang构建工具(转)