當前位置:首頁 » 編程語言 » plsql自定義函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

plsql自定義函數

發布時間: 2022-07-30 18:58:02

㈠ 在pl/sql中 調用函數或者過程的有的時候 declare 變數 begin end,有的時候直接begin end 哪位解釋一下啊

函數或過程需要變數做參數時,就需要declare定義變數,否則就不需要declare

㈡ ORACLE 存儲過程是什麼 它的用處,好處是什麼概念性的東西多點。。

定義:存儲過程(Stored Procere )是一組為了完成特定功能的SQL 語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。
存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。在ORACLE 中,若干個有聯系的過程可以組合在一起構成程序包。
優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。

簡單說,你在你的機器上寫了個存儲過程,這個存儲過程像那些表裡的數據一樣被放在遙遠的資料庫伺服器當中,但是它又是可執行的代碼,其他能連到資料庫伺服器的用戶,可以調用你寫的存儲過程
它的作用是隱藏細節,就是說,你寫的存儲過程代碼可能很復雜,但是其他人調用它卻很簡單,不用具體知道它是如何做的,且一次能完成多個指令

oracle有系統存儲過程和自定義存儲過程2種存儲過程。
系統存儲過程就是由oracle預先提供的一組完成特定功能的存儲過程,安裝完oracle就有了。
自定義存儲過程就是存在oracle資料庫里由一組plsql語句組成的自定義過程(procere)。它可以供其它oracle自定義存儲過程、自定義函數和job調用或者由客戶端程序調用。

㈢ 問一個問題。plsql和mysql,sql server

plsql只用於oracle,plsql是oracle的第三方軟體,其他資料庫不可用。而且plsql不是語言,只是一個工具。
mysql,oracle,sqlserver對應的語言都叫sql語言,但是對於不同資料庫,語法略有不同,內置函數也略有區別,存儲過程,自定義函數等等語法也不同,但是學了其中一個,對於學其他的來說,很有幫助,這三個來說,基本學任意一個就可以,其他的到時候靈活變換,記住函數什麼的也就可以了。

㈣ 在plsql塊自定義函數中如果包含update,delete語句,為什麼不必commit

存儲函數的語法: create function 函數([函數參數[,….]]) Returns 返回類型 Begin If( Return (返回的數據) Else Return (返回的數據) end if; end; 例如: create function count_news(hits int) returns int 與存儲過程返回參數不同的是存儲函...

㈤ plsqldev7登錄後不知道在哪裡寫sql語句

創建的函數,程序可以調用,完成某些功能。也就是自定義函數。與oracle本身的函數一樣。只是更靈活了

㈥ ORA-06502:PLSQL:數值或值錯誤:字元串緩沖區太小

目測,這個不用自定義函數吧,oracle中有現成的

selectwm_concat(tbi_memo)FROMhi_tab_bigtextWHEREtbi_flag=參數

這種轉完是逗號分隔的,你再用replace把逗號去掉就可以啊

㈦ pl/sql自定義函數如何返回多個值

表中也是要參數的啊,光給表了,人家怎麼知道你表裡要返回什麼啊~
RETURN @t TABLE【(f char(20),a char(20),b char(6),c datetime, d char(4) )】
【】裡面的是你要返回表中的參數
@t是你表名的參數
下面的insert你知道么?就是讀入這些參數到那個表中
然後返回輸出~

㈧ plsql自定義函數 不需要返回值怎樣寫

游標變數
通過游標,我們可以取得返回結果集(往往是select語句查詢的結果集)中的任何一行數據,從而提高共享的效率。
參照變數refcursor使用:
定義游標:
1.定義一個游標類型:
Type自定義游標名isrefcursor;2.定義一個游標變數:變數名自定義游標名;
打開游標:
Open游標變數forselect語句;
取出當前游標指向的行:
Fetch游標變數into其他變數;
判斷游標是否指向記錄最後:
游標變數%notfound;關閉游標:Close游標名。

第二種:
var變數名變數類型
call函數名(參數值,...)into:變數名;print變數名第三種:
select函數名(參數,...)fromal;

案例:請編寫一個函數,可以接收用戶名並返回該用戶的年薪。createfunctioninName_outSal(v_in_namevarchar2)returnnumberis
v_annual_salnumber;begin
select(sal+nvl(comm,0))*13intov_annual_salfromempwhereename=v_in_name;returnv_annual_sal;end;/
函數和過程的區別:
1、函數必須有返回值,而過程可以沒有;2、函數和過程在java中調用的方式不一樣;
java中調用oracle函數可以在select語句中直接調用,如:select自定義的函數名(參數)from表;
過程則是使用CallableStatement完成調用。
Java調用函數方式:packagecom.test;
importjava.sql.ResultSet;importjava.sql.SQLException;publicclassTestFunction{
//如何在java中調用自己編寫的函數
publicstaticvoidmain(String[]args){
Stringsql="selectinName_outSal('KING')annualfromal";ResultSetrs=SQLHelper.executeQuery(sql,null);try{
if(rs.next()){
System.out.println(rs.getDouble("annual"));//此處可以用數字或別名接收返回值}
}catch(SQLExceptione){e.printStackTrace();}finally{
if(rs!=null){try{
rs.close();
}catch(SQLExceptione){e.printStackTrace();}}
rs=null;}}

Java調用過程方式:packagecom.test;
importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;publicclassTestProcere{
//調用oracle中update_sal存儲過程
publicstaticvoidmain(String[]args){Connectionct=null;
CallableStatementcs=null;try{
//載入驅動
Class.forName("oracle.jdbc.driver.OracleDriver");//得到連接
ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");
//創建CallableStatement介面引用對象
cs=ct.prepareCall("{callupdate_sal(?,?)}");//給?賦值
cs.setString(1,"BOSS");cs.setFloat(2,8888f);//執行我們的語句cs.execute();//提交
ct.commit();
}catch(Exceptione){e.printStackTrace();}finally{try{
if(cs!=null){cs.close();}
if(ct!=null){ct.close();}
}catch(Exceptione2){e2.printStackTrace();}
cs=null;ct=null;}

}}
pl/sql知識--包(擴張了解,自己看)
包用於在邏輯上組合過程和函數,它由包規范和包體兩部分組成。1、我們可以使用createpackage命令來創建包:建包基本語法:
create[orreplace]package包名is
procere過程名(變數名變數類型,...);
function函數名(變數名變數類型,...)return數據類型;end;/
包的規范:只包含了過程和函數的說明,但是沒有過程和函數的實現代碼。包體:用於實現包規范的過程和函數。
請編寫一個包,該包有一個過程,該過程可以接收用戶名和新的薪水。(將來用於通過用戶去更新薪水)還有一個函數,該函數可以接收一個用戶名(將來要實現得到該用戶的年薪是多少)
createpackageemp_packageis
procereupdate_sal(v_in_enamevarchar2,v_in_newsalnumber);functioninName_outSal(v_in_namevarchar2)returnnumber;end;
2、建立包體可以使用createpackagebody命令建立包體基本語法:
createorreplacepackagebody包名is
procere過程名(變數名變數類型,...)is--聲明變數;begin
--執行語句;exception
when異常名then--異常處理;end;
function函數名(變數名變數類型,...)return數據類型is--聲明變數;begin
--執行語句;end;end;/
案例:請實現前面定義的包中的過程和函數。

gin
select(sal+nvl(comm,0))*13intov_annual_salfromempwhere
ename=v_in_name;
returnv_annual_sal;end;end;/
細節說明:
1、包體中要現實的函數或過程,應當在包規范中聲明;
2、在調用包中的某個函數或過程的時候,需要使用對應的方法才可以調用。3、如何調用包的過程或函數
當調用包的過程或是函數時,在過程和函數前需要帶有包名,如果要訪問其它方案的包,還需要在包名前加方案名。調用基本方法:
exec方案名.包名.過程名(參數,...);call方案名.包名.函數名(參數,...);
也可以直接用select方案名.包名.函數名(參數,...)fromal;

㈨ plsql中有沒有三目表達式

這個需要通過宏表函數EVALUATE來實現,首先需要自定義名稱。
如果數據在A列,那麼在B列自定義名稱,按Ctrl+F3鍵,在「定義名稱框」中選擇「新建」,然後輸入名稱為「結果」,數據來源輸入=EVALUATE(A1),確定。
然後在B1單元格中輸入=結果,並向下填充公式,即可得到A1表達式的結果。

㈩ Oracle 資料庫 關於PLSQL function 函數問題

可以自定義type,然後通過管道函數pipe返回type類型。