--
create table account(
id varchar(32) not null,
name varchar(30),
money numeric(10,2),
constraint a_pk primary key(id)
);
--历史表
select * from history;
drop table history;
create table history(
id varchar(32) not null
aid varchar(32),
dt varchar(19),
money numeric(10,2),
ty varchar(10),
constraint h_pk primary key(id),
constraint h_fk foreign key(aid) references account(id) ); --写入用户
insert into account values(sys_guid(),'Jack',100);
insert into account values(sys_guid(),'Rose',50);
select * from account;
commit;
--BDD483DA232943A2BD7AFDEAA1D13015 Jack 100
--59D6EFC956DB447CB4F9A8BB6B188CCE Rose 50
--创建过程 create or replace procedure trans(p1_id in varchar2,
p2_id in varchar2,
p_money in numeric) as
--声明一个变量
v_count integer;
--保存金额信息
v_money account.money%type;
begin
--限制p_money大于0
if p_money<=0 then
raise_application_error(-20000,'转账金额不能为0');
end if;
--先检查有没有转出的人
select count(1) into v_count from account where id=p1_id;
if v_count=0 then
raise_application_error(-20000,'转出账号不正确');
end if;
--转入的账号
select count(1) into v_count from account where id=p2_id;
if v_count=0 then
raise_application_error(-20000,'转入账号不正确');
end if;
--再检查金额情况
select money into v_money from account where id=p1_id;
--判断
if p_money>v_money then
raise_application_error(-20000,'转账金额不够');
end if;
dbms_output.put_line('开始转账');
--开始转账
--先减money
update account set money=money-p_money where id=p1_id;
--加钱
update account set money=money+p_money where id=p2_id;
--记录hist表
--转出
Insert Into History(Id,Aid,Dt,Money,Ty)
Values(Sys_Guid(),P1_Id,To_Char(Sysdate,'yyyy-mm-dd hh24:mi:ss'),
0-p_Money,'转出');
--再记录转入
Insert Into History(Id,Aid,Dt,Money,Ty)
Values(Sys_Guid(),P2_Id,To_Char(Sysdate,'yyyy-mm-dd hh24:mi:ss'),
P_Money,'转入');
dbms_output.put_line('ok');
end;
select * from account;
Select * From History; set serveroutput on;
Begin
trans('BDD483DA232943A2BD7AFDEAA1D13015','59D6EFC956DB447CB4F9A8BB6B188CCE',100);
end; commit

Oracle利用过程procedure块实现银行转账的更多相关文章

  1. Oracle利用存储过程性 实现分页

    分页的简单配置 在上一次已经说过了 这边说说怎么在存储过程中实现分页 首先建立存储过程 參考 http://www.cnblogs.com/gisdream/archive/2011/11/16/22 ...

  2. Oracle 的过程与函数

    一.过程 1 .过程创建和调用 过程 (procedure) 是一个 PL/SQL 语句块,它存储在数据字典中并可被应用程序调用.可以使用过程存储数据库中频繁使用的应用逻辑.当执行一个过程时,其语句被 ...

  3. oracle储存过程学习笔记

    转载至: https://www.2cto.com/database/201610/559389.htm 1.什么是oracle存储过程 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQ ...

  4. oracle计算过程执行时间写法

    --在oracle写过程中很多是对数据处理,业务比较繁琐,有的需要结合job定时器使用,这样就需要知道执行过程的大概时间,不废话直接上脚本,统计单位为分钟 PROCEDURE DATA_DEAL_WI ...

  5. Oracle学习笔记--Oracle启动过程归纳整理

    Oracle 启动过程分为nomount状态mount状态open状态 每个状态下Oracle都会进行不同的操作:1.nomount状态 在$ORACLE_HOME/dbs目录下寻找参数文件 参数文件 ...

  6. centos7.3 安装oracle 详细过程

    centos7.3安装oracle详细过程1.下载Oracle安装包:linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2 ...

  7. oracle 利用flashback将备库激活为read wirte(10g 及上)

    oracle 利用flashback将备库激活为read wirte(10g 及上) 环境: OS: CENTOS 6.5 X64 DB: ORACLE 10.2.0.5 主库操作: SQL> ...

  8. Oracle安装过程物理内存检查及临时temp空间不足解决办法

    物理内存 – 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB). 预期值 : N/A 实际值 : N/A 错误列表: – 可用物理内存 PRVF-7531 : 无法在节 ...

  9. 【PLSQL】过程procedure形参和参数

    ************************************************************************   ****原文:blog.csdn.net/clar ...

随机推荐

  1. Ubuntu亮度无法调节或调节无法保存的问题

    装了搜狗输入法之后,系统设置里面的很多软件都没有了.以前屏幕太亮在电源里面可以调节,现在不行了.没办法,只能找其他的办法了. 在网上查了很多资料,经自己的实验,找到了一个成功的方法. 首先进入 /sy ...

  2. sqlplus常用操作命令(转)

    SQL*PLUS 是Oracle提供的一个工具程序,它不仅可以用于测试,运行SQL语句和PL/SQL块,而且还可以用于管理Oracle数据库  1.启动sql*plus 为了使用sql*plus,必须 ...

  3. .net 链接oracle

    虽然EF6都快要出来了,但是对于Oracle数据库,仍然只能用DB first和Model First来编程,不能用Code First真是一个很大的遗憾啊. 好了,废话少说,我们来看看EF中是如何用 ...

  4. jquery中this与$this的区别

    来源:http://www.jb51.net/article/19738.htm jQuery中this与$(this)的区别 $("#textbox").hover( funct ...

  5. SQL查询多行合并成一行

    问题描述:无论是在sql 2000,还是在 sql 2005 中,都没有提供字符串的聚合函数,  所以,当我们在处理下列要求时,会比较麻烦:有表tb, 如下:id    value----- ---- ...

  6. 谈谈对web标准的理解

    Web标准不是某一个标准,而是由一系列标准组合而成.网页主要由三部分组成:结构.表现和行为.对应的标准也分三方面:结构化标准语言主要包括XHTML和HTML以及XML,表现标准语言主要包括CSS,行为 ...

  7. u-boot基本命令

    1.查看环境变量 printenv 2.网络相关命令 设置开发板ip:setenv ipaddr 192.168.2.110 设置子网掩码:setenv netmask 255.255.255.0 设 ...

  8. Github获取仓库最新Release版本号API

    package me.chunsheng.hongbao.utils; import android.content.Context; import android.content.Intent; i ...

  9. CSS display:table属性用法- 轻松实现了三栏等高布局

    display:table:此元素会作为块级表格来显示(类似 <table>); display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以 ...

  10. 设计师如何为 Android 应用标注尺寸

    http://blog.cutterman.cn/?p=33 1. 画布大小定位 720 x 1280,72 dpi2. 只使用偶数单位的尺寸,比如 96 px 的列表项高度,16 px 的边距,64 ...