當前位置:首頁 » 存儲配置 » oracle系統存儲過程

oracle系統存儲過程

發布時間: 2023-04-22 21:00:41

⑴ oracle存儲過程是從上到下執行嗎

是。oracle存儲過程是原則從上至下;從右向左由上至下,在執行計劃中一般含有多個節點,所以是。存儲過程(StoredProcere)是在大型資料庫系統中,一組為了完成特定功能的sql語句集,它存儲在資料庫中,一次編譯後永久有效,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。

⑵ oracle的存儲過程

第一步:找到proceres,右鍵新建

第二步:在name中輸入存儲過程名字(這里輸入的就是你以後需要調用的名字),parameters後是參數,在裡面定義參數的類型。
第三步:編寫存儲過程語句。
4 第四步: 存儲過程調用
CallableStatement
cs=conn.divpareCall("{call
mymd_gis_pro(?,?,?,?,?)}"); //1代表第一個參數,setint表示參數類型是int型 cs.setInt(1,188);

cs.setInt(2,12); cs.setInt(3,12);

...... //執行Oracle存儲過程
cs.execute();

⑶ oracle中的存儲過程怎麼寫

Oracle存儲過程寫法實例

總結項目中寫的存儲過程例子:
Oracle存儲過程基本語法 存儲過程
1 CREATE OR REPLACE PROCEDURE 存儲過程名
2 IS/AS
3 BEGIN
4 NULL;
5 EXCEIPTION;
6 END;

1、創建存儲過程,後面可用is或者as:
create or replace procere PRO_COMPLAIN_TEMPLATE as

2、定義變數,此處用到了%TYPE和%ROWTYPE,參考 /database/201211/168564.html ,另外定義了一個游標,TEM_INSTANCE TEMPLATE_CUR%ROWTYPE這個類型定義必須要在游標定義之後:
NEED_DO_FOR_ZL INTEGER;
CURRENT_MAX_ID MEMO_TEMPLET.TEMPLET_ID%TYPE;
CURSOR TEMPLATE_CUR IS SELECT TEMPLET_NAME, TEMPLET_CONTENT FROM SYS_COMPLAINT_TEMPLET;
TEM_INSTANCE TEMPLATE_CUR%ROWTYPE;
3、begin開始塊:
begin

4、該插入語句使用了DBLINK,還有使用DBMS_OUTPUT.put_line('列印信息')進行信息輸出:
insert into MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT, TEMPLET_TYPE, TEMPLET_MEMO) (SELECT * FROM MEMO_TEMPLET@COMPANY);

SELECT COUNT(*) INTO NEED_DO_FOR_ZL FROM SYS_COMPLAINT_TEMPLET;
IF(NEED_DO_FOR_ZL > 0) THEN
DBMS_OUTPUT.put_line('列印信息');
SELECT MAX(TEMPLET_ID)+1 INTO CURRENT_MAX_ID FROM MEMO_TEMPLET;
DBMS_OUTPUT.put_line('MEMO_TEMPLET最大ID' || CURRENT_MAX_ID);
FOR TEM_INSTANCE IN TEMPLATE_CUR LOOP
INSERT INTO MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT,
TEMPLET_TYPE, TEMPLET_MEMO) VALUES (CURRENT_MAX_ID,
TEM_INSTANCE.TEMPLET_CONTENT, '7', NULL);
CURRENT_MAX_ID := CURRENT_MAX_ID + 1;
DBMS_OUTPUT.put_line(TEM_INSTANCE.TEMPLET_CONTENT);
END LOOP;
END IF;
COMMIT;
www.2cto.com
4、exception塊,使用WHEN OTHERS THEN,其中用raise可顯示錯誤信息:
exception
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);
raise;
ROLLBACK;
IF TEMPLATE_CUR%ISOPEN THEN
CLOSE TEMPLATE_CUR;
END IF;
DBMS_OUTPUT.put_line('列印信息');
end;

註:關於游標的使用,如果像本例中使用for循環去遍歷游標的話則不需要顯式的去用open/close
cursor打開和關閉游標,此處會自己處理,如果使用fetch
into的話就需要顯式開關游標,另外任意執行一個update操作,用隱式游標sql的屬性%found,%notfound,%rowcount,%isopen觀察update語句的執行情況,也可以使用來判斷游標狀態,如IF
TEMPLATE_CUR%ISOPEN THEN。

⑷ oracle函數和存儲過程有什麼區別

一、主體不同

1、函數:當需要分析數據清單中的數值是否符合特定條件時,使用資料庫工作表函數。

2、存儲過程:是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,存儲在資料庫中,一次編譯後永久有效。

二、特點不同

1、函數:只能返回一個變數,可以嵌入sql中和存儲過程中使用。

2、存儲過程:用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行。存儲過程是資料庫中的一個重要對象。在數據量特別龐大的情況下利用存儲過程能達到倍速的效率提升。


三、功能不同

1、函數:不能用臨時表,只能用表變數,函數不能執行一組修改全局資料庫狀態的操作。可以作為查詢語句的一個部分來調用,由於函數可以返回一個表對象,所以在查詢中位於from關鍵字後面。

2、存儲過程:存儲過程需要讓sql的query可以執行,存儲過程可以返回參數,如記錄集。sql語句中不可以含有存儲過程。


⑸ oracle帶參(傳入,傳出)的存儲過程怎麼執行

1、新建存儲過程,Create or ReplaceProcere CHK_SYS_EMP 檢查系統工液陸族號。

⑹ oracle存儲過程基本語法

一:存儲過程

創建存儲過程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統許可權   

刪除存儲過程,是過程的創建者或者擁有DROP ANY PROCEDURE系統許可權 

修改存儲過程,則只能是過程的創建者或者擁有ALTER ANY PROCEDURE系統許可權的人

執行(或調用)存儲過程,是過程的創建者或是擁有EXECUTE ANY PROCEDURE系統許可權的人或是被擁有者授予EXECUTE許可權的人

1:語法

 1)創建

CREATE[ORREPLACE]PROCEDURE存儲過程名[(參數[IN|OUT|INOUT] 數據類型...)]

{AS|IS}

[說明部分]

BEGIN

可執行部分

[EXCEPTION

錯誤處理部分]

END[過程名];

 說明:

   OR REPLACE 表示如果存在就覆蓋存儲過程

   參數有三種形式:IN、OUT和IN OUT。則默認為IN。

  關鍵字AS也可以寫成IS,後跟過程的說明部分,可以在此定義過程的局部變數。

2)刪除存儲過程:

DROP PROCEDURE 存儲過程名;

3)修改存儲過程:

      ALTER PROCEDURE 存儲過程名 COMPILE; 

4)執行存儲過程

      EXECUTE 模式名.存儲過程名[(參數...)]; 

     或

       BEGIN 

模式名.存儲過程名[(參數...)];

END;

另外:參數可以是變數、常量或表達式

 要其它用戶執行存儲過程須要給其它用戶授權

GRANT EXECUTE ON 存儲過程名 TO 用戶名

 2:參數說明

IN 定義一個輸入參數變數,用於傳遞參數給存儲過程

OUT 定義一個輸出參數變數,用於從存儲過程獲取數據

IN OUT 定義一個輸入、輸出參數變數,兼有以上兩者的功能

 1)參數名 IN 數據類型 DEFAULT 值;

          定義一個輸入參數變數,用於傳遞參數給存儲過程。

          可以是常量、有值變數或表達式

          DEFAULT 關鍵字為可選項,用來設定參數的默認值。如果在調用存儲過程時不指明參數,則參數變數取默認值

          在存儲過程中,輸入變數接收主程序傳遞的值,但不能對其進行賦值。

2)參數名 OUT 數據類型;

          定義一個輸出參數變數,用於從存儲過程獲取數據,即變數從存儲過程中返回值給主程序。

          在調用存儲過程時,主程序的實際參數只能是一個變數,而不能是常量或表達式。

          在存儲過程中,參數變數只能被賦值而不能將其用於賦值,而且必須給輸出變數至少賦值一次。

3)參數名 IN OUT 數據類型 DEFAULT 值; 

          定義一個輸入、輸出參數變數,兼有以上兩者的功能。

          在調用存儲過程時,主程序的實際參數只能是一個變數,而不能是常量或表達式。

          DEFAULT 關鍵字為可選項,用來設定參數的默認值。

          在存儲過程中,變數接收主程序傳遞的值,同時可以參加賦值運算,也可以對其進行賦值。在存儲過程中必須給變數至少賦值一次。

補充:如果省略IN、OUT或IN OUT,則默認模式是IN。 

          調用它時參數個數與位置可以不一致,用以下形式調用:

EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);  //=>運算符左側是參數名,右側是參數表達式

 二:函數

創建函數,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統許可權

刪除函數,需要是函數的創建者或者是擁有DROP ANY PROCEDURE系統許可權的人

修改函數,需要是函數的創建者或者擁有ALTER ANY PROCEDURE系統許可權的人

執行函數,需要是函數的創建者或擁有EXECUTE ANY PROCEDURE系統許可權的人

1:語法

1)創建:

CREATE[ORREPLACE]FUNCTION函數名[(參數[IN] 數據類型...)]

RETURN數據類型

{AS|IS}

[說明部分]

BEGIN

可執行部分

RETURN(表達式)

[EXCEPTION

    錯誤處理部分]

END[函數名];

 說明:

     參數是可選的,但只能是IN類型(IN關鍵字可以省略)。

     在定義部分的RETURN 數據類型,用來表示函數的數據類型,也就是返回值的類型,不可省略。

     在可執行部分的RETURN(表達式),用來生成函數的返回值,其表達式的類型應該和定義部分說明的函數返回值的數據類型一致。在函數的執行部分可以有多個RETURN語句,但只有一個RETURN語句會被執行,一旦執行了RETURN語句,則函數結束並返回調用環境。 

2)刪除

      DROP FUNCTION 函數名;

3)修改

      ALTER PROCEDURE 函數名 COMPILE;

4)執行

      變數名:=函數名(...) 

三:對存儲過程 和 函數的查看(可以通過對數據字典【USER_SOURCE】的訪問來查詢存儲過程或函數的有關信息)

 1:查詢某個存儲過程序內容

select TEXT from user_source WHERE NAME='存儲過程名';

 2:查看數據字殿

DESCRIBE USER_SOURCE ; //命令行中

 3:查看存儲過程的參數

DESCRIBE say_hello; //後面是過程名

 4:查看發生編輯錯誤

SHOW ERRORS ;

 5:查詢一個存儲過程或函數是否是有效狀態(即編譯成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='過程名';//注意大小寫

VALID表示該存儲過程有效(即通過編譯),INVALID表示存儲過程無效或需要重新編譯。它的狀態會改變,這與它依賴外部表(表刪除修改等操作)有關系

6:查看存儲過程與表的依賴關系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

 說明

NAME為實體名,TYPE為實體類型,REFERENCED_OWNER為涉及到的實體擁有者賬戶,REFERENCED_NAME為涉及到的實體名,REFERENCED_TYPE 為涉及到的實體類型。

問題:

如果一個用戶A被授予執行屬於用戶B的一個存儲過程的許可權,在用戶B的存儲過程中,訪問到用戶C的表,用戶B被授予訪問用戶C的表的許可權,但用戶A沒有被授予訪問用戶C表的許可權,那麼用戶A調用用戶B的存儲過程是失敗的還是成功的呢?答案是成功的。

⑺ Oracle怎麼導出存儲過程

1、首先登錄到資料庫中,點擊右上角有個工具欄,點擊工具欄上的tools。

⑻ oracle中儲存過程是什麼意思

存儲過程就好象一個批處理文件一樣,你可以在裡面執行很多的SQL,來得到你最好需要的結果.當你發現一個復雜的統計在一條SQL語句中不能實現或是很難實現的時候,那最好用存儲過程來實現 存儲過程的執行速度更快
存儲過程在伺服器端早已編輯執行過的代碼。用戶要做的只是調用和接收存儲過返回的結果。所以調用存儲過程比普通的用查詢語句返回值要快得多。

熱點內容
望海潮上傳 發布:2025-02-12 12:16:08 瀏覽:672
javathread源碼 發布:2025-02-12 12:12:37 瀏覽:907
整個伺服器搭建教程 發布:2025-02-12 11:48:16 瀏覽:579
我的世界伺服器人多的 發布:2025-02-12 11:48:12 瀏覽:347
為實現分頁存儲管理需要哪些硬體支持 發布:2025-02-12 11:46:34 瀏覽:539
編程下載線 發布:2025-02-12 11:41:48 瀏覽:210
json存儲數據 發布:2025-02-12 11:41:39 瀏覽:219
天龍八部腳本免費 發布:2025-02-12 11:30:12 瀏覽:501
卡羅拉的配置一般買哪個好一點 發布:2025-02-12 11:20:03 瀏覽:743
沒有伺服器的IP怎麼連上 發布:2025-02-12 11:19:55 瀏覽:80