本节以java为例来访问存储过程,和存储函数
存储过程11114
结论:存储过程完全可以取代自定义存储函数
包头负责声明,包体负责实现
调用存储函数
存储过程的调用
存储过程与存储函数的具体区别和使用场景
存储函数必须有返回值
带输入参数的存储过程
注意:
带参数要指明是输入参数还是输出参数(返回值)
一般不在存储过程或者函数提交或者回滚事务,而是交给调用者去操作事务
存储过程只能创建或者替换,不能修改,因此语法定义为 create [or replace]
存储过程的demo和两种调用方式
除此之外,可以认为存储过程和存储函数是一样的!!!
在out参数中使用光标,包头包体等。
用pl/sql工具如何便捷创建包头?
1.创建存储过程:
create or replace procedure queryimg(pstu_id in number,
pstuname out varchar2,
page out varchar2,
pclassid out varchar2) as
begin
select t.stuname,t.age,t.classid into pstuname,page,pclassid from zhaozy.student t where stuid = pstu_id;
end;
2.调用:
declare
pstu_id varchar2(256);
pstuname varchar2(256);
page varchar2(256);
pclassid varchar2(256);
begin
pstu_id := 1;
queryimg(pstu_id => pstu_id,
pstuname => pstuname,
page => page,
pclassid => pclassid);
dbms_output.put_line('pstuname=' || pstuname);
-- :pstuname := pstuname;
dbms_output.put_line('page=' || page);
-- :page := page;
dbms_output.put_line('pclassid=' || pclassid);
-- :pclassid := pclassid;
end;
3.疑问:
:page := page;这里冒号什么作用?
加上之后报错:“ORA-01008 并非所有变量都已绑定”
如果去掉冒号就不会报错,但是输出结果和删除这一句是一样的。
1.存储函数格式:create or replace function 函数名(参数表)
return 函数值类型
as
PLSQL子程序体;
2.举例return所在位置:
调用如上存储函数,注意奖金字段要转为非空,否则输出结果为空:
3.调用函数:
例子(建立存储过程,然后用pl/sql程序调用):
---给学号加100
create or replace procedure STU(v_name in varchar) as
p_stu_id pm_stu.stu_id%type;
begin
select stu_id into p_stu_id from pm_stu where stu_name= v_name;
update pm_stu set stu_id = stu_id + 100 where stu_name = v_name;
dbms_output.put_line('涨前:' || p_stu_id || '涨后: ' || (p_stu_id + 100));
end;
select t.*,rowid from zhaozy.pm_stu t;
BEGIN
STU('李四');
rollback;
STU('张三');
commit;
END;
create or replace PROCEDURE 过程名(参数表)
as PLSQL子程序体;
as 相当于PL/SQL程序中的declare,as不可省略,后面跟说明部分,定义光标变量之类的。
3.如何调用存储过程:
create or replace PROCEDURE sayhello as
begin
dbms_output.put_line('HELLO WORLD');
end;
3.1.调用存储过程:
execute sayhello;
可简写为 exec sayhello;
3.2.通过PLP/SQL 程序调用
BEGIN
sayhello();
sayhello();
END;
存储过程和存储函数:
指存储在数据库中供用户程序调用的子程序叫存储过程,存储函数。
相同点:完成特定的功能的程序
区别:是否用return语句返回值,存储函数可以通过return返回一个函数的值
OracleCallableStatement转变类型
存储过程、存储函数
:指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数
存储过程和存储函数的相同点:完成特定功能的程序
存储过程和存储函数的区别:是否用return语句返回值,存储过程不能通过return子句返回函数值;存储函数可以通过return子句返回函数值。
数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数
--创建一个带参数的存储过程:
--给指定的员工涨100块钱的工资,并且打印涨前和涨后的薪水
--eno是传入的员工号
/*
如何调用:
begin
raisesalary(7839);
raisesalary(7566);
commit;
end;
*/
create or replace procedure raisesalary(eno in number)
as
--定义一个变量保存涨前的薪水
psal emp.sal%type;
begin
--得到员工涨前的薪水
select sal into psal from emp where empno=eno;
--给该员工涨100
update emp set all=sal+100 where empno=eno;
--需不需要commit?
--注意:一般不在存储过程或者存储函数中,commit和rollback。
--打印
dbms_output.put_line('涨前:'||psall||'涨后:'||(psal+100));
end;
调用存储过程
1、exec sayhelloworld();
2、begin
存储过程名();
end;
存储过程调用方式:
1、exec pro_name();
2、 begin
pro_name();
end;
/
int和out参数
存储过程,定义变量
create or replace 存储过程