當前位置:首頁 » 服務存儲 » orcale存儲過程開發實例
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

orcale存儲過程開發實例

發布時間: 2023-03-23 02:20:48

『壹』 用 Oracle 存儲過程編寫一個簡單的程序,要求

Oracle存儲過程開發的要點是:
• 使用Notepad文本編輯器,用Oracle PL/sql編改閉程語言寫一個存儲過程;
• 在Oracle資料庫中創建一個存儲過程;
• 在Oracle資料庫中使用SQL*Plus工具運行存圓殲銀儲過程;
• 在Oracle資料庫中修改存儲過程;
• 通過編譯錯誤調試存儲過程;
• 刪除存儲過程;
二.環境配置
包括以下內容:
• 一個文本橘宴編輯器Notepad;
• Oracle SQL*Plus工具,提交Oracle SQL和PL/SQL 語句到Oracle database。
• Oracle 10g express資料庫,它是免費使用的版本;

『貳』 ORACLE如何創建存儲過程,詳細例子。

--創建存儲過程 IN_SHEETID 為輸入參數CREATE OR REPLACE <a class="-highlight" href="https://www..com/s?wd=PROCEDURE&tn=44039180_cpr&fenlei=-EUBtkP1n1n1RdPjTvP1bvrH6kP10L" target="_blank">PROCEDURE</a> ST_RECEIPT(IN_SHEETID VARCHAR2) ISBEGIN--將 receipt0表中數據插入 receiptINSERT INTO RECEIPTSELECT * FROM RECEIPT0 WHERE SHEETID = IN_SHEETID;--更新receipt表中Flag值UPDATE RECEIPT SET FLAG = 100 WHERE SHEETID = IN_SHEETID;--INSERT INTO RECEIPTITEMSELECT * FROM RECEIPTITEM0 WHERE SHEETID = IN_SHEETID;--刪除ReceiptItem0表數據DELETE FROM RECEIPTITEM0 WHERE SHEETID = IN_SHEETID;--刪除 receipt0表數據DELETE FROM RECEIPT0 WHERE SHEETID = IN_SHEETID;<a class="-highlight" href="https://www..com/s?wd=END&tn=44039180_cpr&fenlei=-EUBtkP1n1n1RdPjTvP1bvrH6kP10L" target="_blank">END</a>;--調用存儲過程BEGINST_RECEIPT('ys141128');<a class="-highlight" href="https://www..com/s?wd=END&tn=44039180_cpr&fenlei=-EUBtkP1n1n1RdPjTvP1bvrH6kP10L" target="_blank">END</a>;--或者EXEC ST_RECEIPT('ys141128');

『叄』 存儲過程的實例

資料庫存儲過程
資料庫存儲過程的實質就是部署在資料庫端的一組定義代碼以及SQL。將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來,那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
利用SQL的語言可以編寫對於資料庫訪問的存儲過程,其語法如下:
CREATE PROC[EDURE] procere_name [;number]
[
{@parameter data_type} ][VARYING] [= default] [OUTPUT]
]
[,...n]
[WITH
{
RECOMPILE
| ENCRYPTION
| RECOMPILE, ENCRYPTION
}
]
[FOR REPLICATION]
AS
sql_statement [...n]
[ ]內的內容是可選項,而()內的內容是必選項,
例:若用戶想建立一個刪除表tmp中的記錄的存儲過程Select_delete可寫為:
Create Proc select_del As
Delete tmp
例:用戶想查詢tmp表中某年的數據的存儲過程
create proc select_query @year int as
select * from tmp where year=@year
在這里@year是存儲過程的參數
例:該存儲過程是從某結點n開始找到最上層的父親結點,這種經常用到的過程可以由存儲過程來擔當,在網頁中重復使用達到共享。
空:表示該結點為頂層結點
fjdid(父結點編號)
結點n 非空:表示該結點的父親結點號
dwmc(單位名稱) CREATEprocsearch_dwmc@dwidoldint,@dwmcresultvarchar(100)outputasdeclare@stopintdeclare@resultvarchar(80)declare@dwmcvarchar(80)declare@dwidintsetnocountonset@stop=1set@dwmc=""select@dwmc=dwmc,@dwid=convert(int,fjdid)fromjtdwwhereid=@dwidoldset@result=rtrim(@dwmc)if@dwid=0set@stop=0while(@stop=1)and(@dwid<>0)beginset@dwidold=@dwidselect@dwmc=dwmc,@dwid=convert(int,fjdid)fromjtdwwhereid=@dwidoldif@@rowcount=0set@dwmc=""elseset@result=@dwmc+@resultif(@dwid=0)or(@@rowcount=0)set@stop=0elsecontinueendset@dwmcresult=rtrim(@result)使用execpro-name[pram1pram2.....]SQL Server中存儲過程
sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。
在SQL Server的查詢分析器中,輸入以下代碼:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt
以上代碼是執行order_tot_amt這一存儲過程,以計算出訂單編號為1的訂單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果。
Oracle中的存儲過程
1.創建過程
與其它的資料庫系統一樣,Oracle的存儲過程是用PL/SQL語言編寫的能完成一定處理功能的存儲在資料庫字典中的程序。
語法:
create [or replace] procere procere_name
[ (argment [ { in| in out }] type,
argment [ { in | out | in out } ] type
{ is | as }
<類型.變數的說明>
(注:不用 declare語句 )
Begin
<執行部分>
exception
<可選的異常處理說明>
end;
1.1 這里的IN表示向存儲過程傳遞參數,OUT表示從存儲過程返回參數。而IN OUT 表示傳遞參數和返回參數;
1.2 在存儲過程內的參數只能指定參數類型;不能指定長度;
1.3 在AS或IS 後聲明要用到的變數名稱和變數類型及長度;
1.4 在AS或IS 後聲明變數不要加declare 語句。
2.使用過程
存儲過程建立完成後,只要通過授權,用戶就可以在SQLPLUS 、Oracle開發工具或第三方開發工具來調用運行。Oracle 使用CALL 語句來實現對存儲過程的調用。
語法:
call procere_name( parameter1, parameter2…);
3.開發過程
如今的幾大資料庫廠商提供的編寫存儲過程的工具都沒有統一,雖然它們的編寫風格有些相似,但由於沒有標准,所以各家的開發調試過程也不一樣。下面編寫PL/SQL存儲過程、函數、包及觸發器的步驟如下:
3.1 編輯存儲過程源碼使用文字編輯處理軟體編輯存儲過程源碼,要用類似WORD文字處理軟體進行編輯時,要將源碼存為文本格式。
3.2 對存儲過程程序進行解釋在SQLPLUS或用調試工具將 存儲過程程序進行解釋;
在SQL>下調試,可用start 或get 等Oracle命令來啟動解釋。如:
SQL>start c:stat1.sql
如果使用調試工具,可直接編輯和點擊相應的按鈕即可生成存儲過程。
3.3 調試源碼直到正確我們不能保證所寫的存儲過程達到一次就正確。所以這里的調試是每個程序員必須進行的工作之一。在SQLPLUS下來調試主要用的方法是:
1.使用 SHOW ERROR命令來提示源碼的錯誤位置;
2.使用 USER_ERRORS數據字典來查看各存儲過程的錯誤位置。
3.4 授權執行權給相關的用戶或角色如果調試正確的存儲過程沒有進行授權,那就只有建立者本人才可以運行。所以作為應用系統的一部分的存儲過程也必須進行授權才能達到要求。 在SQLPLUS下可以用GRANT命令來進行存儲過程的運行授權。
語法:
GRANT system_privilege | role TO user | role | PUBLIC
[WITH ADMIN OPTION]

GRANT object_privilege | ALL column ON schema.object
TO user | role | PUBLIC WITH GRANT OPTION
其中
system_privilege: 系統許可權
role: 角色名
user: 被授權的用戶名
object_privilege: 所授予的許可權名字,可以是
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
Column: 列名
schema: 模式名
object: 對象名
4.數據字典
USER_SOURCE 用戶的存儲過程、函數的源代碼字典
DBA_SOURCE 整個系統所有用戶的存儲過程、函數的源代碼字典
ALL_SOURCE 當前用戶能使用的存儲過程(包括其她用戶授權)、函數的源代碼字典
USER_ERRORS 用戶的存儲過程、函數的源代碼存在錯誤的信息字典
臨時表
(針對SQL2000/2005)
可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。
本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。
SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由 CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過 116 個字元。
除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。
所有其它本地臨時表在當前會話結束時自動除去。
全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。

『肆』 oracle存儲過程的例子

基本語法:
create or replace procere p1 --存儲過程名稱
[(p_輸入參數 in datatype數據類型,p_輸出參數 out datatype數據類型)]
as
--v_變數名 datatype數據類型;也可戚豎聲明程序中需要的變數逗裂
begin
--執行語句;增刪改查
--[exception 異常處理]
end;
一般創建表不寫存儲過程:
create table USERS(
userid number(5) identity primary key,
username varchar2(20),
password varchar2(20)
);
insert into users values('AA','123');
insert into users values('bb','123');
查詢的存儲過程:輸入用戶名,查詢高指大密碼
create or replace procere p1
(
p_username in users.username%type,p_password out users.password%type
)as
begin
select password into p_password from users where username=p_username;
exception
when no_data_found then dbms_output.put_line('用戶不存在');
end;
create or replace procere p2
(
p_username in users.username%type,p_password in users.password%type
)as
begin
insert into users values(p_username,p_password);
end;

『伍』 linux如何編譯oracle存儲過程

在筆者的一個銀行項目中,我接到編寫Oracle存儲過程的任務,我是程序員,腦袋裡只有一些如何使用CALLABLE介面調用存儲過程的經驗,一時不知如何下手,我查閱了一些資料,通過實踐發現編寫ORACLE存儲過程是非常不容易的工作,即使上路以後,調試和驗證非常麻煩。簡單地講,Oracle存儲過程就是存儲在Oracle資料庫中的一個程序。

一.概述

Oracle存儲過程開發的要點是:

◆使用Notepad文本編輯器,用OraclePL/SQL編程語言寫一個存儲過程;

◆在Oracle資料庫中創建一個存儲過程;

◆在Oracle資料庫中使用SQL*Plus工具運行存儲過程;

◆在Oracle資料庫中修改存儲過程;

◆通過編譯錯誤調試存儲過程;

◆刪除存儲過程;

二.環境配置

包括以下內容:

◆一個文本編輯器Notepad;

◆OracleSQL*Plus工具,提交OracleSQL和PL/SQL語句到Oracledatabase。

◆Oracle10gexpress資料庫,它是免費使用的版本;

需要的技巧:

◆SQL基礎知識,包括插入、修改、刪除等

◆使用Oracle'sSQL*Plus工具的基本技巧;

◆使用Oracle'sPL/SQL編程語言的基本技巧;

三.寫一個存儲過程

存儲過程使用Oracle'sPL/SQL程序語言編寫,讓我們寫一個什麼工作都不做的存儲過程,我們可以編譯和運行它而不用擔心會對資料庫產生任何損害。

在Notepad,寫下:IS

BEGIN

NULL;

END;

把文件存為skeleton.sql.

讓我們一行行遍歷這個存儲過程:

1

2IS

3BEGIN

4NULL;

5END;

行1:

CREATEORREPLACEPROCEDURE是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程,如果存在就覆蓋它;

行2:

IS關鍵詞表明後面將跟隨一個PL/SQL體。

行3:

BEGIN關鍵詞表明PL/SQL體的開始。

行4:

NULLPL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;

行5:

END關鍵詞表明PL/SQL體的結束

四.創建一個存儲過程

SQL語句CREATEORREPLACEPROCEDURE在Oracle資料庫中創建、編譯和保存一個存儲過程。

從Window打開SQL*Plus並且從SQL*Plus登錄到你的資料庫;打開skeleton.sql文件.

在SQL>命令提示符下輸入以下命令:

SQL>@skeleton

SQL>/

SQL*Plus裝載skeleton.sql文件的內容到SQL*Plus緩沖區並且執行SQL*Plus語句;SQL*Plus會通知你存儲過程已經被成功地創建。

現在你的存儲過程被創建,編譯和保存在你的Oracle資料庫,我們可以運行它。

五.運行一個存儲過程

從SQL*Plus命令行提示符運行你的存儲過程使用EXECUTE命令,如下:

SQL>EXECUTEskeleton;

SQL*Plus輸出一下信息確信存儲過程成功執行:PL/.

你也可以在一個無名PL/SQL塊內運行你的存儲過程,在SQL*Plus命令提示符下,它看起來像:

SQL>BEGIN

2SKELETON;

3END;

4/

現在我們已經運行了我們的存儲過程,我們如何修改它呢?

六.修改一個存儲過程

讓我們寫一個輸出字元串「HelloWorld!」的存儲過程,用Notepad打開你的skeleton.sql文件,.用DBMS_OUTPUT.PUT_LINE過程調用去替換NULL語句,如下所示:IS

BEGIN

DBMS_OUTPUT.PUT_LINE('HelloWorld!');

END;

保存到文件skeleton.sql.

從SQL*Plus命令行,打開文件skeleton.sql.

SQL>@skeleton

SQL>

1

2IS

3BEGIN

4DBMS_OUTPUT.PUT_LINE('HelloWorld!');

5*END;

SQL>/

SQL*Plus通知你存儲過程成功創建並輸出提示信息:Procerecreated.

SQL>

用EXECUTE命令運行你的存儲過程:

SQL>EXECUTEskeleton;

SQL*Plus顯示存儲過程運行成功:PL/.

我們想要的輸出字元串"HelloWorld!"沒有出來,在顯示一個DBMS_OUTPUT.PUT_LINE結果前需要運行一個SET命令,在SQL*Plus命令行提示符,鍵入:

SQL>SETSERVEROUTPUTON

再次執行你的存儲過程:

SQL>EXECUTEskeleton;

現在結果輸出了:HelloWorld!

PL/.

七.調試一個存儲過程

當調試一個存儲過程時,遵循一樣的步驟,修改SQL文件,創建存儲過程,執行存儲過程,根據編譯器反饋的出錯信息進行修改,這一步是非常繁瑣的,需要依靠經驗。

在實際的商用存儲過程的開發調試過程中,由於涉及很多表、類型、游標、循環、條件等復雜的邏輯,和PL/SQL語句的靈活運用,編譯時會產生很多錯誤提示信息,程序員在根據這些錯誤信息定位,進行修正,再編譯最後得到正確的結構;

八.放棄一個存儲過程

如果在資料庫中你不在需要一個存儲過程你可以刪除它,SQL語句DROPPROCEDURE完成從資料庫中刪除一個存儲過程,DROPPROCEDURE在SQL中被歸類為數據定義語言(DDL)類操作,其他的例子有CREATE,ALTER,RENAME和TRUNCATE。.

在SQL*Plus命令提示符下,使用DROPPROCEDURESQL語句刪除你的叫做skeleton的存儲過程:

SQL>DROPPROCEDUREskeleton;

SQL*:

Proceredropped.

總結

本文詳細討論了如何使用Oracle工具開發Oracle商用存儲過程的步驟。最後在存儲過程的使用中可能是程序直接調用,也可能被觸發器調用

『陸』 oracle 存儲過程執行動態sql實例

oracle的動態sql是指在語句塊使用execute immediate 執行sql語句,sql語句可以使用存儲過程傳的參數進行拼接,本文針對varchar2和number兩種類型的參數類型,進行sql拼接並執行。

功能:輸入日期區間,銷售數量滿足上限和下限的產品id

1.正常傳值

輸出結果

2.若果number類型的參數傳空,會報ora-00936:缺失表達式,可以在存儲過程中增加對參數null值的判斷

oracle 動態拼接傳入參數,varchar2類型可以使用'''|| IN_START_DTIME || ''' ,number類型可以使用'||IN_DOWN_LIMIT||' ; 拼接的過程需要注意校驗參數的合法性,增加存儲過程的容錯性。臨時表使用了會話級,存儲過程執行完,可以通過查詢存儲過程獲取結果。

『柒』 Oracle存儲過程及舉例(幾種參數情況的存儲

create table TESTTABLE
(
id1 VARCHAR2(12),
name VARCHAR2(32)
)
select t.id1,t.name from TESTTABLE t
insert into TESTTABLE (ID1, NAME)
values ('1', 'zhangsan');

insert into TESTTABLE (ID1, NAME)
values ('2', 'lisi');

insert into TESTTABLE (ID1, NAME)
values ('3', 'wangwu');

insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');

insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---創建存儲過程
create or replace procere test_count
as
v_total number(1);
begin
select count(*) into v_total from TESTTABLE;
DBMS_OUTPUT.put_line('總人數:'||v_total);
end;
--准備
--線對scott解鎖:alter user scott account unlock;
--應為存儲過程是在scott用戶下。還要給scott賦予密碼
---alter user scott identified by tiger;
---去命令下執行
EXECUTE test_count;
----在ql/spl中的sql中執行
begin
-- Call the procere
test_count;
end;

create or replace procere TEST_LIST
AS
---是用游標
CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
begin
for Test_record IN test_cursor loop---遍歷游標,在列印出來
DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
END LOOP;
test_count;--同時執行另外一個存儲過程(TEST_LIST中包含存儲過程test_count)
end;
-----執行存儲過程TEST_LIST
begin
TEST_LIST;
END;
---存儲過程的參數
---IN 定義一個輸入參數變數,用於傳遞參數給存儲過程
--OUT 定義一個輸出參數變數,用於從存儲過程獲取數據
---IN OUT 定義一個輸入、輸出參數變數,兼有以上兩者的功能
--這三種參數只能說明類型,不需要說明具體長度 比如 varchar2(12),defaul 可以不寫,但是作為一個程序員最好還是寫上。

---創建有參數的存儲過程
create or replace procere test_param(p_id1 in VARCHAR2 default '0')
as v_name varchar2(32);
begin
select t.name into v_name from TESTTABLE t where t.id1=p_id1;
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----執行存儲過程
begin
test_param('1');
end;

default '0'

---創建有參數的存儲過程
create or replace procere test_paramout(v_name OUT VARCHAR2 )
as
begin
select name into v_name from TESTTABLE where id1='1';
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----執行存儲過程
DECLARE
v_name VARCHAR2(32);
BEGIN
test_paramout(v_name);
DBMS_OUTPUT.PUT_LINE('name:'||v_name);
END;
-------IN OUT
---創建存儲過程
create or replace procere test_paramINOUT(p_phonenumber in out varchar2)
as
begin
p_phonenumber:='0571-'||p_phonenumber;
end;

----
DECLARE
p_phonenumber VARCHAR2(32);
BEGIN
p_phonenumber:='26731092';
test_paramINOUT(p_phonenumber);
DBMS_OUTPUT.PUT_LINE('新的電話號碼:'||p_phonenumber);
END;
-----sql命令下,查詢當前用戶的存儲過程或函數的源代碼,
-----可以通過對USER_SOURCE數據字典視圖的查詢得到。USER_SOURCE的結構如下:

SQL> DESCRIBE USER_SOURCE ;
Name Type Nullable Default Comments

---- -------------- -------- -------
-------------------------------------------------------------------------------------------------------------
NAME VARCHAR2(30) Y Name of the object

TYPE VARCHAR2(12) Y Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",
"PACKAGE", "PACKAGE BODY" or "JAVA SOURCE"
LINE NUMBER Y Line number of this line of
source

TEXT VARCHAR2(4000) Y Source text

SQL>
---查詢出存儲過程的定義語句
select text from user_source WHERE NAME='TEST_COUNT';
----查詢存儲過程test_paramINOUT的參數
SQL> DESCRIBE test_paramINOUT;
Parameter Type Mode Default?
------------- -------- ------ --------
P_PHONENUMBER VARCHAR2 IN OUT
SQL>
---查看當前的存儲過程的狀態是否正確,
---VALID為正確,INVALID表示存儲過程無效或需要重新編譯
SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
-----如果要檢查存儲過程或函數的依賴性,可以通過查詢數據字典USER_DENPENDENCIES來確定,該表結構如下:
SQL> DESCRIBE USER_DEPENDENCIES;
Name Type Nullable Default Comments
-------------------- ------------- -------- ------- ----------------------------------------------------------
NAME VARCHAR2(30) Name of the object
TYPE VARCHAR2(17) Y Type of the object
REFERENCED_OWNER VARCHAR2(30) Y Owner of referenced object (remote owner if remote object)
REFERENCED_NAME VARCHAR2(64) Y Name of referenced object
REFERENCED_TYPE VARCHAR2(17) Y Type of referenced object
REFERENCED_LINK_NAME VARCHAR2(128) Y Name of dblink if this is a remote object
SCHEMAID NUMBER Y
DEPENDENCY_TYPE VARCHAR2(4) Y
SQL>
---查詢存儲過程TEST_COUNT的依賴關系
SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';

『捌』 ORACLE的存儲過程都用在什麼地方最好能舉幾個工作中的例子

存儲過程最多的用於C/S兩層架構模式下,用於在後台處理業務邏輯和數據。
前台開發工具例如PowerBuilder可以實現界面展示和操作流程,涉及到後台某個集中處理數據、或者大批量數據的業務邏輯,就在Oracle後台存儲過程裡面來實現了。

卸載存儲過程裡面的東西,往往是不需要交互的一段處理過程,例如前台界面是「結算」業務,輸入了結算時間段和結算單位以及相關的控制參數例如結算方法等,把這些參數傳給後台存儲過程,後台存儲過程裡面可以編制相關的結算處理程序,根據輸入的單位、時間、方法類型等參數,來進行集中處理,這個過程是不需要與前台進行交互的,這里可以處理很復雜的業務,例如結算會涉及到多個表如單位基本信息表、單位結算信息表、明細表等等,可以在存儲過程裡面集中實現處理,然後把結果返回給前台,前台根據處理結果是否成功,決定是否進行提交(COMMIT)操作。

『玖』 oracle存儲過程的例子

基本語純含純法:x0dx0acreate or replace procere p1 --存儲過程名稱x0dx0a[(p_輸入參數 in datatype數據類型,p_輸出參數 out datatype數據類型)]x0dx0aasx0dx0a--v_變數名 datatype數做咐據類型;也老掘可聲明程序中需要的變數x0dx0abeginx0dx0a --執行語句;增刪改查x0dx0a --[exception 異常處理]x0dx0aend;x0dx0a一般創建表不寫存儲過程:x0dx0a create table USERS(x0dx0a userid number(5) identity primary key,x0dx0a username varchar2(20),x0dx0a password varchar2(20)x0dx0a );x0dx0a insert into users values('AA',飓');x0dx0a insert into users values('bb',飓');x0dx0a查詢的存儲過程:輸入用戶名,查詢密碼x0dx0a create or replace procere p1x0dx0a (x0dx0a p_username in users.username%type,p_password out users.password%typex0dx0a )asx0dx0a beginx0dx0a select password into p_password from users where username=p_username;x0dx0a exceptionx0dx0a when no_data_found then dbms_output.put_line('用戶不存在');x0dx0a end;x0dx0a create or replace procere p2x0dx0a (x0dx0a p_username in users.username%type,p_password in users.password%typex0dx0a )asx0dx0a beginx0dx0a insert into users values(p_username,p_password);x0dx0a end;

『拾』 oracle資料庫存儲過程實例

創建存儲過程的語句如下:
CREATE[OR REPLACE] PROCEDURE<過程名>
<參數1>,「方式l]<數據類型1>,
<參數2>,[ 方式2]<數據類型2>,
……)
IS|AS (is或as完全等價)
BEGIN
PL/SQL過程體
END<過程名>

例如,下面是一個刪除表的存儲過程:

--參數:tableName 要刪除的表名
create or replace procere del_table(tableName varchar2) as
--定義變數
sql_del_table long;
begin
--構造sql語句
sql_del_table := 'drop table ' || tableName;
--執行
EXECUTE IMMEDIATE sql_del_table;

end del_table;