oracle存儲過程的實例
A. 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;
B. 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。
C. 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');
D. 急求!怎麼建立oracle存儲過程(實例)
create or replace PROCEDURE st_receipt(p_sheetid varchar2(16))
AS
BEGIN
insert into receipt select * from receipt0 where sheetid=p_sheetid ; --將 receipt0表中數據插入 receipt
update receipt set Flag=100 wheresheetid=p_sheetid; --更新receipt表中Flag值
insert into ReceiptItem select * from ReceiptItem0 where sheetid=p_sheetid ;
delete from ReceiptItem0 where sheetid=p_sheetid ;--刪除ReceiptItem0表數據
delete from receipt0 where sheetid=p_sheetid ; --刪除 receipt0表數據
end ;
exec st_receipt('ys141128')
E. 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;
F. oracle存儲過程實例求教
首先說下本人最近在學習存儲過程 網上的資料也比較的少和片面。搞了很久了還是沒有學好(比較笨吧)。現在來求助高手 先謝了!! 現在有表信息如下:表名:user表欄位:autoid number,username varchar2(32),password(32),email(32)四個欄位明顯autoid是主鍵 要求:寫出地此表的crud操作。及java代碼調用存儲過程的代碼 都貼出來 代碼應該不是很多 查詢要求要返回表中的所有的記錄。資料庫必須是Oracle的 代碼盡量寫的詳細一些。分數的話不成問題的只要寫的夠好夠詳細的話分是不成問題的。
G. 誰能給我一個oracle存儲過程的例子
你這個寫成存儲過程有什麼用的? 檢索了一些數據出來,你應該是要返回這些數據吧?應該要寫個函數返回遊標吧
-- 先創建一個自定義類型
create or replace package types as
type cur_type is ref cursor;
end;
-- 返回遊標的函數
CREATE OR REPLACE FUNCTION f_test(
in_userId VARCHAR2 ,
in_userName VARCHAR2 )
RETURN types.cur_type
AS
v_cursor types.cur_type;
v_sql VARCHAR2(2000);
BEGIN
v_sql := 'select * from Users where 1 = 1';
IF in_userName IS NOT NULL THEN
v_sql := v_sql||'and UserName = '''||in_userName||'''';
END IF;
IF in_userId IS NOT NULL THEN
v_sql := v_sql||'and UserID = '''||in_userId||'''';
END IF;
OPEN v_cursor FOR
v_sql;
RETURN v_cursor;
END f_test;
H. oracle存儲過程參數實例
可以調用 沒問題的 只要當前用戶可以訪問這個table
I. 求兩個oracle存儲過程例子
create or replace procere proc_create is (固定語法定義存儲過程名稱)
begin
create table user_info (
userid number(5) primary key,
username varchar2(20),
password varchar2(20)
);--(建表完成,這個就不用解釋了吧)
insert into user_info values('AA','123');
insert into user_info values('BB','123');
end proc_create;--(創建表的存儲過程完成,注意格式即可,begin下面寫正常的sql語句就ok了)
後面的那個你理解之後,自己先試試能不能寫出來再說 盡量自己解決了撒。
另外還可以創建帶參數的存儲過程,多查查資料
不明白再問哈