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
这里遇到了写入全角空格而导致存储过程执行失败的错误,空格删掉,重新按空格解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!