當前位置:首頁 » 編程語言 » java調用sql表值函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java調用sql表值函數

發布時間: 2023-03-16 19:51:21

A. sql server 中的自定義函數應該如何調用

select dbo. get_supinfo('content ','table')

B. sql2005中 表值函數是什麼

表值函數是資料庫中一種較為特殊的函數類型,它的悔喚返回值不再只是一個數值搜指或一個字元串,而是一張數據表。也就是說表值函數返回的是 table 數據類型。對於內聯表值函數,沒有函數主體;表是單個 SELECT 語句的結果集。使用表值函數的時候,把函數直接當成是表或視圖使用,表世前配值函數的參數傳入方法與標量函數沒有區別。

C. 用T-SQL語句自定義一表值函數

declare @sql varchar(8000)
set @sql='select * from '
if flag=1
set @sql=@sql+'CP1'
if flag=2
set @sql=@sql+'XSS1'謹嫌態祥源
if flag=3
set @sql=@sql+'者談XSCP1'
exec(@sql)

D. SQL SERVER函數之深入表值函數的處理分析

有些情況可能用下表值函數,表值函數主要用於數據計算出來返回結果集,可以帶參數(和視圖的一個大的區別),如果函數中沒有過多的邏輯處理,如變數的定義,判斷等,
表值函數返回結果集可以簡單向下面這么寫:
復制代碼
代碼如下:
CREATE
FUNCTION
Fun_GetReportNews(@type
varchar(10))
RETURNS
TABLE
AS
RETURN
(

SELECT
TPR_ID,TPR_Title,TPR_Date
FROM
TP_ReportNews
WHERE
TPR_Type
=
@type
)
調用的時候就
SELECT
XX
FROM
Fun_GetReprotNews('xx')
如果函數中要定義變數,進行判斷計算處理什麼的,寫法有點不一樣了,要定義表變數才行,表值函數里是不允許創建臨時表的,只能是表變數。
舉個簡單的寫法樣式,如下:
復制代碼
代碼如下:
CREATE
FUNCTION
FUN_GetInfoList(@type
varchar(10))
RETURNS
@Table
TABLE(TPR_ID
int,TPR_Title
nvarchar(100),TPR_PubDate
datetime)
AS
BEGIN

DECLARE
@a
varchar(10)

SELECT
@a
=
xx
FROM
XX
WHERE
xx
=
@type

INSERT
@Table
SELECT
XX,XX,XX
FROM
TableName
WHERE
XX
=
@a
--表變數里定義的列數和取值列數要一致
RETURN
END
如果進行多表操作,可以在函數體內定義表變數來存放結果集再進行關聯查詢。
標量值函數也貼一個樣子好了,老掉牙的了,呵呵~~
復制代碼
代碼如下:
CREATE
FUNCTION
FUN_DataFormat
(@strDate
datetime)
RETURNS
varchar(20)
AS
BEGIN

declare
@date
varchar(20)

set
@date
=
DATENAME(YY,@strDate)+'年'+Convert(VARCHAR,MONTH(@strDate))+'月'+Convert(VARCHAR,DAY(@strDate))+'日'

return
@date
END
訪問標量值函數時一般在函數名前加dbo,不然會被認為是系統內置函數,卻因又不是系統內置函數而會報錯。
上面的可以這么測試
select
dbo.FUN_DataFormat(getdate())
就忽悠這些了~~~~~~~

E. java 調用sql表值函數不成功 返回「結果集沒有當前行」

String sql_daystate="select rid from daystate('"+in+"','"+out+"')";
in和out在字元串sql_daystate中自動轉換成為了String,和函數參數類型不匹配。無法運行。
不信你講sql_daystate列印出來看看。

F. java調用oracle存儲過程 關於sql裡面in函數參數的問題

調用存儲過程是java 把組合起來的字喚亂搜符串傳到資料庫後台操作,如果你in ( pkStagesPersonArray),傳到資料庫後台還是 in ( pkStagesPersonArray) 而非你想要的 in('1330251','1336140' )所以你應和歷該把pkStagesPersonArray 裡面的內容轉換成 '1330251','陪謹1336140' 再拼接起來

G. 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;

H. sql server 怎樣用select語句調用自定義表值函數

--自定義函數的參數是表的欄位,這種情況要用cross apply啦
Select B.* FROM [master].[dbo].[分列測試] A cross apply dbo.f_split(應用行業代碼,';') B