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
好的代码像粥一样,都是用时间熬出来的