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

這里遇到了寫入全角空格而導致存儲過程執行失敗的錯誤,空格刪掉,重新按空格解決。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM