Oracle-存储过程

简介

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,它大大提高了SQL语句的功能和灵活性。存储过程编译后存储在数据库中,所以执行存储过程比执行存储过程中封装的SQL语句更有效率。

语法

 存储过程:
一组为了完成某种特定功能的sql语句集,
存储在数据库中,经过一次编译后,再次调用不需要再次编译.
用户通过存储过程的名字进行调用存储过程
优点:
效率高,安全性好,复用性强,可维护性高,不用传输大量的sql
存储过程,游标,视图的区别
在存储过程的语法中 可以使用as或is
在游标中只能使用is
在视图中只能使用as

定义语法:
create or replace procedure存储过程名(推荐proc_)
as |is
    --定义变量
begin
    --存储过程执行的语句
end;
调用语法:
call存储过程名();

示例

 无参无返回值

-- 1.创建一个最简单的存储过程,只输出︰你好存储过程------(无参无返回值)--定义
create or replace procedure proc_out_info
as
begin
dbms_output.put_line('你好,存储过程');
end;
--调用
call proc_out_info();--不可以省略

2.创建两个变量,在存储过程中输出这两个变量的值-李四,,成绩90 ---李四的数学成绩为90分
--定义
create or replace procedure proc_out_info_2
is
	myname varchar2(50):='李四";
	score number;
begin
	score: =90;
	dbms_output.put_line(mynamell'的数学成绩为'||scorell'分');
end;
--调用
call proc_out_info_2();

注意事项:1.如果存储过程没有输入参数及输出参数()可以不写
2.如果存储过程包含输入参数则必须要写(),
同时使用in来标明该参数为输入参数
存储过程名(参数名1 in参数类型1 ,参数名2 in参数类型2)

带参无返回

--6查询根据部门编号统计该部门的员工人数并输出------带参无返回
--select count(*) from emp where depid=3;
--分析:因为不知都部门编号因此采用带一个输入参数的存储过程,
--一个输入参数:类型number
--定义
create or replace procedure proc_emp_depid(dno in number )
is
	num number : =0;
begin
	select count(*) into numfrom emp
	where depid=dno;
	dbms_output.put_line( '部门编号为'l|dno||'的员工个数为'||num);
end;
--调用
--查询部门编号为1的员工人数
call proc_emp_depid(1);
--查询部门编号为3的员工人数
call proc_emp_depid(3);
--查询部门编号为5的员工人数
call proc_emp_depid(5);

 

--7.根据学生姓名及学生性别查询符合条件的学生个数并输出
--带几个输入参数,分别什么类型
--姓名性别, varchar() char()
--定义
create or replace PROCEDURE proc_emp_name( sname in varchar2,ssex in char)
is
	num number : =0;begin
	select count(*) into numfrom student
	where stuname like concat(concat( %' , sname), '%') and sex=ssex;
    dbms_output.put_line('学生个数为‘||num);
end;
--调用
callproc_emp_name( '李", '0');

无参带返回值

-- 类似 java 中 带有 返回值的调用

-- 无参带返回值, out 输出参数, 存储过程的返回值
create or replace procedure  proc_lian_1(name out  VARCHAR2)
as
begin

    name:='你好存储过程';
end;




--调用
declare s VARCHAR2(50);
begin
   proc_lian_1(s);
	 dbms_output.put_line(s);
end;

 带参带返回值

--带参带返回值

-- 定义输入输出参数的形式, 来实现, 根据 年级编号统计 学生的总数

--  年级编号 输入参数
--  学生总数 输出参数

create or replace procedure proc_lian_1(gradeId in number,stucount out number)
is
begin

    select  count(*) into stucount
		from  student
	  where gid=gradeId;

end;


-- 调用

declare  s number; gid number;
begin
    gid:=2;
    proc_lian_1(gid,s);    --调用存储过程
		dbms_output.put_line('年级编号为'||gid||'的学生人数为'||s); --输出结果
end;

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Oracle 数据库中,当你尝试执行存储过程时,可能会遇到 "ORA-01031: 权限不足" 错误。这个错误通常是由于当前用户缺少执行该存储过程所需的权限而引起的。解决这个问题的方法取决于你正在使用的环境和具体情况。 以下是一些可能的解决方案: 1. 确保用户具有执行存储过程的权限:检查当前用户是否具有执行存储过程所需的权限。你可以使用 `GRANT` 语句为用户授予相应的权限。 2. 检查存储过程所引用的对象的所有者和权限:确保存储过程中引用的表、视图或其他对象的所有者和权限设置正确。如果存储过程中引用了其他用户的对象,你需要确保当前用户具有访问这些对象的权限。 3. 检查用户的角色和权限:如果当前用户是通过角色进行授权的,而不是直接通过权限,你需要确保这些角色具有执行存储过程所需的权限。 4. 检查连接字符串和数据库链接配置:如果你使用的是连接池或者其他连接管理工具,确保连接字符串和数据库链接配置正确,并且具有足够的权限。 5. 检查数据库审计设置:在某些情况下,数据库审计设置可能会限制某些操作。检查数据库的审计设置,看看是否有任何限制或审计规则导致了权限不足的错误。 如果上述方法都无法解决问题,你可能需要进一步检查你的数据库和应用程序的配置,或者咨询数据库管理员或技术支持人员以获取更多帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

射手座的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值