菜鳥一枚,記錄學習過程中遇到的問題和解決辦法。
統計表數據個數
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
這里遇到了寫入全角空格而導致存儲過程執行失敗的錯誤,空格刪掉,重新按空格解決。


