當前位置:首頁 » 存儲配置 » oracle定義存儲過程

oracle定義存儲過程

發布時間: 2025-02-08 16:54:35

Ⅰ 如何運行和調試Oracle存儲過程

編寫Oracle存儲過程時,首先需要定義和創建過程。以下是一個示例過程,用於創建表分區:

CREATE OR REPLACE PROCEDURE P_AUTO_CREATE_PARTITION (Result OUT INT, LogErrDesc OUT VARCHAR2) IS

type TypeTable is table of VARCHAR2(20);

CreatePartitionErr EXCEPTION;

days TypeTable;

BEGIN

Result := 0;

SELECT DATETIME BULK COLLECT INTO days FROM (SELECT TO_CHAR(TRUNC(SYSDATE-2,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE-1,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE+1,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE+2,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL);

FOR i IN 1..days.COUNT LOOP

IF bruce_partiton.CreatePartitions('T_CDT_1X_BASIC_Partion',days(i)) < 0 THEN

RAISE CreatePartitionErr;

END IF;

END LOOP;

/* 名字寫錯了 bruce_partiton,應該為 bruce_partition */

COMMIT;

/* 異常處理 */

EXCEPTION

WHEN CreatePartitionErr THEN

ROLLBACK;

Result := -1;

LogErrDesc := sqlERRM;

COMMIT;

RETURN;

WHEN OTHERS THEN

ROLLBACK;

Result := -2;

LogErrDesc := 'CDM_CTCALLTRACEINFO_PRC_NEW Fail!'||SUBSTR(dbms_utility.format_error_stack,1,200);

COMMIT;

RETURN;

END P_AUTO_CREATE_PARTITION;

/

在調試存儲過程時,可以使用PL/SQL調試工具。具體步驟如下:

1. 在PL/SQL中選擇需要調試的存儲過程。

2. 右鍵點擊該過程,選擇「TEST」選項,然後選擇「ADD DEBUGINFO」以添加斷點。

3. 運行調試,選擇「RUN」命令,或者在「Program Window」中執行。

調試過程中,可以通過單步執行、查看變數值、檢查執行路徑等方式來定位和解決代碼中的問題。這有助於提高存儲過程的健壯性和可靠性。

在實際開發中,編寫和調試存儲過程是非常重要的步驟。通過以上方法,可以確保存儲過程能夠正確地執行並滿足業務需求。

Ⅱ oracle中函數和存儲過程的區別和聯系

在oracle中,函數和存儲過程是經常使用到的,他們的語法中有很多相似的地方,但也有自己的特點。剛學完函數和存儲過程,下面來和大家分享一下自己總結的關於函數和存儲過程的區別。
一、存儲過程

1.定義

存儲過程是存儲在資料庫中提供所有用戶程序調用的子程序,定義存儲過程的關鍵字為procere。

2.創建存儲過程

create [or replace] procere 存儲過程名

[(參數1 類型,參數2 out 類型……)]

as

變數名類型;

begin

程序代碼體

end;

示例一:無參無返

create or replace procere p1
--or replace代表創建該存儲過程時,若存儲名存在,則替換原存儲過程,重新創建
--無參數列表時,不需要寫()
as
begin
dbms_output.put_line('hello world');
end;

--執行存儲過程方式1
set serveroutput on;
begin
p1();
end;
--執行存儲過程方式2
set serveroutput on;
execute p1();

示例二:有參有返

create or replace procere p2
(name in varchar2,age int,msg out varchar2)
--參數列表中,聲明變數類型時切記不能寫大小,只寫類型名即可,例如參數列表中的name變數的聲明
--參數列表中,輸入參數用in表示,輸出參數用out表示,不寫時默認為輸入參數。
------------輸入參數不能攜帶值出去,輸出參數不能攜帶值進來,當既想攜帶值進來,又想攜帶值出去,可以用in out
as
begin
msg:='姓名'||name||',年齡'||age;
--賦值時除了可以使用:=,還可以用into來實現
--上面子句等價於select '姓名'||name||',年齡'||age into msg from al;
end;
--執行存儲過程
set serveroutput on;
declare
msg varchar2(100);
begin
p2('張三',23,msg);
dbms_output.put_line(msg);
end;

示例三:參數列表中有in out參數

create or replace procere p3
(msg in out varchar2)
--當既想攜帶值進來,又想攜帶值出去,可以用in out
as
begin
dbms_output.put_line(msg); --輸出的為攜帶進來的值
msg:='我是從存儲過程中攜帶出來的值';
end;

--執行存儲過程
set serveroutput on;
declare
msg varchar2(100):='我是從攜帶進去的值';
begin
p3(msg);
dbms_output.put_line(msg);
end;

示例四:存儲過程中定義參數

create or replace procere p4
as
--存儲過程中定義的參數列表
name varchar(50);
begin
name := 'hello world';
dbms_output.put_line(name);
end;
---執行存儲過程
set serveroutput on;
execute p4();

總結:1.創建存儲過程的關鍵字為procere。

2.傳參列表中的參數可以用in,out,in out修飾,參數類型一定不能寫大小。列表中可以有多個輸入輸出參數。

3.存儲過程中定義的參數列表不需要用declare聲明,聲明參數類型時需要寫大小的一定要帶上大小。

4.as可以用is替換。

5.調用帶輸出參數的過程必須要聲明變數來接收輸出參數值。

6.執行存儲過程有兩種方式,一種是使用execute,另一種是用begin和end包住。

存儲過程雖然有很多優點,但是它卻不能使用return返回值。當需要使用return返回值時,我們可以使用函數。

二、存儲函數

1.函數與存儲過程的結構類似,但是函數必須有一個return子句,用於返回函數值。

create or replace function f1
return varchar--必須有返回值,且聲明返回值類型時不需要加大小
as
msg varchar(50);
begin
msg := 'hello world';
return msg;
end;

--執行函數方式1
select f1() from al;
--執行函數方式2
set serveroutput on;
begin
dbms_output.put_line(f1());
end;

三、存儲過程與存儲函數的區別和聯系

相同點:1.創建語法結構相似,都可以攜帶多個傳入參數和傳出參數。

2.都是一次編譯,多次執行。

不同點:1.存儲過程定義關鍵字用procere,函數定義用function。

2.存儲過程中不能用return返回值,但函數中可以,而且函數中必須有return子句。

3.執行方式略有不同,存儲過程的執行方式有兩種(1.使用execute2.使用begin和end),函數除了存儲過程的兩種方式外,還可以當做表達式使用,例如放在select中(select f1() form al;)。

總結:如果只有一個返回值,用存儲函數,否則,一般用存儲過程。

Ⅲ oracle怎麼寫存儲過程

給你示例你參考下:
----------------------------建立存儲過程:
CREATE OR REPLACE PROCEDURE P_name--存儲過程名字
(
i_var in int, --輸入參數1
o_var OUT varchar2 --輸出參數1
)
IS
v_STR VARCHAR2(200); --定義存儲過程內部的局部變數

BEGIN
--下面是存儲過程的主體實現部分
v_STR := i_var;
dbms_output.put_line(v_STR);
o_var := v_STR;
exception--錯誤異常處理部分
when others then
dbms_output.put_line(sqlerrm);--列印錯誤信息
END P_name;

-----------------------------------調用存儲過程示例:
declare
v_in int;
v_out varchar2(50);
begin
v_in :=100;
P_name (v_in,v_out); --調用存儲過程P_name
dbms_output.put_line('存儲過程輸入結果為:'||v_out);
exception--錯誤異常處理部分
when others then
dbms_output.put_line(sqlerrm);--列印錯誤信息
end;

Ⅳ Oracle 定義存儲過程 不能執行,處於無效狀態。

無效狀態有兩種可能,一種是你的存儲過程編輯沒有成功,創建了,但裡面有語法錯誤。
還有一種是存儲過程使用的表有結構上的改變,需要重新編譯一下。
你重新編譯一下,如果不成功,就是有語法問題,你需要修改存儲過程。

熱點內容
網吧怎麼通過伺服器玩網路游戲 發布:2025-02-08 19:59:52 瀏覽:914
文檔編輯加密 發布:2025-02-08 19:56:31 瀏覽:390
phpmysql存儲過程實例 發布:2025-02-08 19:54:40 瀏覽:161
淘寶賣的地下城腳本 發布:2025-02-08 19:41:40 瀏覽:61
安卓怎麼把提升畫質關了 發布:2025-02-08 19:40:11 瀏覽:361
我想你加密 發布:2025-02-08 19:39:24 瀏覽:215
java手機號正則表達式 發布:2025-02-08 19:34:50 瀏覽:353
ue加密 發布:2025-02-08 19:34:05 瀏覽:476
滁州壓縮機 發布:2025-02-08 19:34:03 瀏覽:882
壓縮棉花絮片 發布:2025-02-08 19:33:12 瀏覽:395