oracle数据库执行存储过程

菜鸟一枚,记录学习过程中遇到的问题和解决办法。

统计表数据个数

create or replace procedure prm_example
is
n_number number;
begin
select count(*) into n_number from emp;
dbms_output.put_line(n_number);
end;

这里n_number是定义的一个变量,number代表数字类型,其他例如varchar,date等类型

执行

begin
prm_example;
end;

打印当前时间,简单测试

create or replace procedure prm_example
is
datenow date;

begin
select sysdate into datenow from dual;
dbms_output.put_line(datenow);
end;

dbms_out.put_line()是一个打印变量值的方法,效果如下

 

 

 

执行一个查找字段的方法

create or replace procedure prc_example(de in varchar,name out varchar,App_Code out varchar,error_Msg out varchar)
as
begin
select dname into name from dept where deptno=de;
exception when others then
App_Code:=-1;
error_Msg:='未找到数据';
end;

和普通sql不一样的是,这里使用了into字段,对name进行了赋值。假如未找到数据,会抛出异常,将异常抓住,给两个出参赋值。

其实存储过程简单理解为就是一个函数,把一堆sql操作集成到一起,一次执行,

de 代表入参,类似于函数的参数,name,app_code,error_meg代表出参,类似返回值。

写语句测试

declare
de varchar(10);
ab varchar(10);
appcode varchar(20);
ermg varchar(20);
begin
de:=10;
prc_example(de,ab,appcode,ermg);
dbms_output.put_line(ermg);
end;

这里:=是赋值符号

结果

 

 

 

第二种测试,先找到存储过程

 

 

 

右键选择test

 

 

 

给入参写值,按F8执行,这里我的入参是10,执行结果如下

 

 

 

因为进行了异常处理,假如没有找到数据,那么,会给后面两个出参赋值,效果图

 

 

 

插入两张表操作


create or replace procedure prm_example(do1 in number ,dn1 in varchar,eo1 in number,en1 in varchar ,App_Code out varchar,error_Msg out varchar)
as
begin
insert into dept(deptno,dname) values (do1,dn1);
insert into emp(empno,ename,deptno) values(eo1,en1,do1);

commit;
exception when others then
App_Code:=-1;
error_Msg:='插入失败';
end;

注意,在写存储过程时,在输入空格时,使用英式键盘,否则,会报如下错误

Compilation errors for PROCEDURE FENG.PRM_EXAMPLE

Error: PLS-00103: 出现符号 "?"在需要下列之一时:
( begin case declare exit for
goto if loop mod null pragma raise return select update while
with <an identifier> <a double-quoted delimited-identifier>
<a bind variable> << continue close current delete fetch lock
insert open rollback savepoint set sql execute commit forall
merge pipe purge
Line: 3
Text: begin

这里遇到了写入全角空格而导致存储过程执行失败的错误,空格删掉,重新按空格解决。

 

 

 

 

posted @   5miyuan  阅读(3475)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示