Oracle存储过程

1. 存储过程定义
Oracle存储过程是一种命名的PL/SQL程序块,存储过程被保存在数据库中,它不可以被SQL语句直接执行或调用,只能通过EXECUT命令执行或在PL/SQL程序块中内部调用
2.创建存储过程
create or replace procedure insert_data_to_user(
		   d_name in varchar2,--参数一
		   d_address in varchar2--参数二
	) is 
	begin 
	  insert into t_user (t_name,t_address) values(d_name,d_address);--存储过程的实体,向表中插入数据
	  commit;--提交事务
	end;

or replace作用是如果在当前模式下数据库已经存在名为add_data_to_user的存储过程,就会覆盖之前创建的同名的存储过程。

3.执行存储过程

在PL/SQL中执行存储过程语句为:

begin
	add_data_to_user;
end;

例如:执行带参数insert_data_to_user存储过程

begin
    insert_data_to_user(d_name=>'张三',d_address => '上海');
end;
4.存储过程的关键字

存储过程可以接受多个参数,参数模式包括:IN、OUT、INOUT三种。

  • IN: 输入型参数。参数值由调用方传入,并且只能被存储过程使用读取;
  • OUT: 输出类型的参数。表示这个参数在存储过程中已经被赋值,并且可以将这个参数传到存储过程之外的环境中去。
5.执行多个存储过程
begin
	insert_data_to_user('CSDN ','位置不详');
	insert_data_to_user('北京市朝阳区 ','九零大叔芭蕉');
end;
6.查看存储过程中的参数定义信息
desc insert_data_to_user;

例如:

	D_NAME    VARCHAR2 IN            
	D_ADDRESS VARCHAR2 IN    
7. 添加表、字段注释
comment on table user_master_data is '用户信息表';
comment on column user_master_data.user_name is '用户名称'
8.创建Sequence
create sequence seq_product_id
	minvalue 1
	maxvalue 99999999999
start with 1
	increment by 1
	cache 20;
9.创建结合Sequence的存储过程
create or replace procedure  insert_data_to_product(
	d_name in varchar2,
	d_count in number,
	d_price in number,
	d_area in varchar2
) is 
begin
	insert into t_product values(seq_product_id.nextval,d_name,d_count,d_price,d_area);
	commit;
end;
10.执行结合Sequence的存储过程
begin
	insert_data_to_product('apple',100,d_price => 5,d_area => 'china');
end;

结果示例:
select * from t_product;

P_ID	P_NAME	P_COUNT		P_PRICE		P_AREA
1		apple	100		    5			china
2		汽车		20			100000		美国
3		飞机		10			65900000	美国
4		大豆		300000		2.2			巴西
5		手机		300000		3200		中国
11.创建OUT模式的存储过程
create or replace procedure get_data_from_product (
	g_id in number,       --声明一个输入变量参数
	g_name out varchar2,  --声明一个输出变量
	g_count out varchar2  --声明一个输出变量
) is
begin
	select p_name,p_count into g_name,g_count from t_product where p_id=g_id;--存储过程主体,根据传入的id查询产品的名字和数量
end;
12.执行OUT模式的存储过程(需要指定输出哪个字段)
declare
	var_name t_product.p_name%type;
	var_count t_product.p_count%type;
begin
	get_data_from_product(2,var_name,var_count);
	dbms_output.put_line(var_name);
	dbms_output.put_line(var_count);
end;

结果示例:

	汽车
	20

好的代码像粥一样,都是用时间熬出来的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值