--
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. Unity之极光推送

    Android应用中大多数应用使用了推送,游戏中当然也可以使用推送!下面在Unity3D做个测试!(下面是客套话,大家可以忽略) 1.1 什么是推送技术? 推送技术,又名反向AJAX,指的是一种基于I ...

  2. 【二分答案nlogn/标解O(n)】【UVA1121】Subsequence

    A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...

  3. ASP.NET Signalr 2.0 实现一个简单的聊天室

    学习了一下SignalR 2.0,http://www.asp.net/signalr 文章写的很详细,如果头疼英文,还可以机翻成中文,虽然不是很准确,大概还是容易看明白. 理论要结合实践,自己动手做 ...

  4. Android通过PHP连接MySQL(用到Json)

    1下载phpnow 如果已经有mysql 则需要换一个端口 在服务器机器上的phpnow安装目录E:\PHPnow-1.5.5\htdocs下新建一个test.php文件: 其中我用的数据库是test ...

  5. win7系统64位plsql的设置

    1. Instant Client Downloads for Microsoft Windows (32-bit) 我下载的是: instantclient-basic-win32-11.2.0.1 ...

  6. UILabel + 导入字体

    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(10, 100, 300, 100)]; 1.设置文字颜色 label.textC ...

  7. 时间的获取和转换,C#和Sql

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...

  8. C++ 多态性浅谈

    多态:一个接口, 多种方法.程序在运行时才决定调用的函数是什么. C++多态通过 虚函数实现, 虚函数允许子类重新定义成员函数, 子类override父类. 多态与非多态的实质区别:函数地址是早绑定还 ...

  9. java的clone

    做项目时有时可能会遇到需要克隆对象的时候,因为有时候对象是直接从别的类get到的,那样引用的是一个对象,修改的话会将原先的对象也修改了. java的浅克隆,十分简单.但是只会克隆基本的数据类型,当涉及 ...

  10. [Oracle]查看和修改连接数

    #登陆数据库sqlplus system/*** as sysdba #显示当前最大连接数:show parameter processes; show parameter sessions; #修改 ...