定義:存儲過程(Stored Procedure )是一組為了完成特定功能的SQL 語句 集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù) (如果該存儲過程帶有參數(shù))來執(zhí)行它。
存儲過程是數(shù)據(jù)庫中的一個重要 對象,任何一個設(shè)計良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程。
存儲過程是由流控制和SQL 語句書寫的過程,這個過程經(jīng)編譯和優(yōu)化后 存儲在數(shù)據(jù)庫服務(wù)器中,應(yīng)用程序使用時只要調(diào)用即可。在ORACLE 中, 若干個有聯(lián)系的過程可以組合在一起構(gòu)成程序包。
優(yōu)點:存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
2.當對數(shù)據(jù)庫進行復(fù)雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
3.存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量。
4.安全性高,可設(shè)定只有某用戶才具有對指定存儲過程的使用權(quán)。你還是給我點分啥,寫得我手都酸痛了。
使用oracle的一般都裝了PL/SQL吧,對象窗口,找到對應(yīng)的函數(shù)或者存儲過程,右鍵查看或編輯。
一般單個我是這么用,如果很多的話可以參考一下網(wǎng)上提供的方法:
oracle 導(dǎo)出一個用戶下的所有存儲過程
方法一:
set echo off ;
set heading off ;
set feedback off ;
spool d:\tmp.txt
select text from user_source ;
spool off;
方法二:
使用PL/SQL 菜單 Tools --> Export user objects... ,對彈出的dialog中選擇user和output file,選中要導(dǎo)出的內(nèi)容,點擊export導(dǎo)出就行了
這個過程就行了。。
create or replace procedure wymauthid current_useris vn_ctn number(2)
;begin select count(*) into vn_ctn from user_all_tables a where a.table_name like upper('invbasdoc')
; if vn_ctn > 0 then execute immediate 'drop table invbasdoc'
; end if; execute immediate 'create table invbasdoc as select * from test_abcd'
;end ;原來的過程中:execute immediate 'drop table invbasdoc'; 當如果數(shù)據(jù)庫中不存在這張表的時候就會報錯的。。上面是對數(shù)據(jù)庫中是否存在表進行了判斷,因此能夠避免“表不存在”這樣的錯誤。。
不需要execute,直接寫dbms_stats.gather_table_stats(就可以,而且專門寫個存儲過程沒意義。
首先需要授權(quán)
sqlplus / as sysdba
grant create view to your_user;
然后創(chuàng)建表和存儲過程
drop table table1;create table TABLE1( user_id VARCHAR2(10), user_name VARCHAR2(10), user_mail VARCHAR2(10), user_mobile VARCHAR2(10), user_telephone VARCHAR2(10));CREATE OR REPLACE PROCEDURE CREATEVIEWS IS V_SQL VARCHAR2(10240);BEGIN V_SQL := 'CREATE OR REPLACE VIEW V_TEST AS SELECT T1.USER_ID, T1.USER_NAME, --用戶姓名 T1.USER_MAIL, --用戶MAIL T1.USER_MOBILE, --用戶手機 T1.USER_TELEPHONE --用戶電話 FROM TABLE1 T1'; EXECUTE IMMEDIATE V_SQL;END CREATEVIEWS;/
執(zhí)行,OK
SQL> exec createviews;PL/SQL procedure successfully completed
可用語句查看或用第三方工具查看。
一、語句查看方法:
1、執(zhí)行語句:
SELECT text FROM user_source WHERE NAME = 'Procedure Name'ORDER BY line;--其中Procedure Name為存儲過程名字,需要全部用大寫英文。
2、如要查P_TEST的存儲過程:
SELECT text FROM user_source WHERE NAME = 'P_TEST'ORDER BY line;
3、內(nèi)容如下:
二、工具查看:
1、登錄第三方工具(如pl/sql)登錄到指定數(shù)據(jù)庫。
2、左側(cè)樹中找到Procedures,然后找到相應(yīng)的存儲過程。
3、右鍵該存儲過程,選擇“查看”。
4、然后就可以看到了。
從參數(shù)的返回情況來看:
如果返回多個參數(shù)值最好使用存儲過程,如果只有一個返回值的話可以使用函數(shù);
從調(diào)用情況來看:
如果在SQL語句(DML或SELECT)中調(diào)用的話一定是存儲函數(shù)或存儲的封裝函數(shù)不可以是存儲過程,但調(diào)用存儲函數(shù)的時候還有好多限制以及函數(shù)的純度等級的問題,你可以參考《ORACLE 9I PL\SQL程序設(shè)計》(機械工業(yè)出版社);
如果是在過程化語句中調(diào)用的話,就要看你要實現(xiàn)什么樣的功能。函數(shù)一般情況下是用來計算并返回一個計算結(jié)果而存儲過程一般是用來完成特定的數(shù)據(jù)操作(比如修改、插入數(shù)據(jù)庫表或執(zhí)行某些DDL語句等等),所以雖然他們的語法上很相似但用戶在使用他們的時候所需要完成的功能大部分情況下是不同的。
我的回答:oracle存儲過程是編譯好的并且存儲在數(shù)據(jù)庫服務(wù)器中的程序代碼。存儲過程有名字及自己的參數(shù),但是存儲過程沒有返回值。一個存儲過程就是一組命名的PL/SQL語句。
這個存儲過程你可以在TEST的環(huán)境下查看結(jié)果,不過你需要隱式游標來進行操作,那樣才能看到,具體步驟如下:
1、首先我們要借助游標,因此需要先定義一個返回類型的游標createorreplacepackagetype_difinitionastypemycursorisrefcursor;endtype_difinition;
2、改寫你的存儲過程,要想查看執(zhí)行SQL后結(jié)果需要一個返回參數(shù),這個參數(shù)即上面定義的游標類型createorreplaceprocedureselect_pro(p_resultouttype_difinition.mycursor--返回結(jié)果)issyn_sqlvarchar2(200)default'';beginsyn_sql:='select*fromemp';--此處打開游標,并把需執(zhí)行的SQL賦值給游標openp_resultforsyn_sql;endselect_pro;
3、執(zhí)行編譯通過后,右鍵點擊存儲過程的名字,跳出框,選擇Test一項,進入Test界面4、點擊編譯、再點擊執(zhí)行5、Test界面的底部界面,有個VariableTypevalue的列表,此時你可以點擊Value值里面的...按鈕,即可查看結(jié)果,由于不怎么會應(yīng)用這個編輯器,本想把圖片上傳給你,如有不解,再詳問,希望回答對樓主有幫助
建議使用PowerDesigner將ORACLE轉(zhuǎn)換為物理模型,再轉(zhuǎn)換為邏輯模型,然后通過這個邏輯模型重新選擇DBMS(MYSQL),將其轉(zhuǎn)換為MYSQL的物理邏輯模型,在物理邏輯模型上更新觸發(fā)器,過程等對象,然后生成MYSQL的物理文件,或直接導(dǎo)入到MYSQL數(shù)據(jù)庫實例中。