![](/img/trans.png)
[英]Table variable as in parameter to populate a table in oracle Stored procedure
[英]Table variable in Oracle stored procedure
我是Oracle的新手,我需要將我的SQL Server存儲過程轉換為oracle。 在SQL Server中,我有返回表變量的函數。
執行看起來像:
Declare @tblTSVal table(stValue varchar(500), itemKey varchar(255), props varchar(max))
insert @tblTSVal(stValue, itemKey, props)
select * from dbo.fn_ag_valuesToTable(@tsVal)
我在我的Oracle數據庫中編寫了這個函數,它正在運行。 但我不知道如何在存儲過程中聲明一個表變量。
現在我正在嘗試這樣:
宣言:
type AGValues as object
(
stValue varchar(255),
itemKey varchar(255),
props varchar(8000)
);
type ValTBL is Table of AGValues;
執行:
insert into tblTSVal(stValue, itemKey, props)
select * from TABLE(dbMis.fn_ag_valuesToTable(tsVal));
這會導致錯誤:
表或視圖不存在。
請給我一些建議。
ValTBL是所謂的嵌套表。 要在其中加載數據,請使用BULK COLLECT選項。
例:
SELECT * BULK COLLECT INTO tblTSVal FROM TABLE(dbMis.fn_ag_valuesToTable(tsVal));
但那不是“表或視圖不存在”的根源。 錯誤問題。 請檢查您執行dbMis.fn_ag_valuesToTable
函數的權限。
使用pl / sql函數作為表值得閱讀有關流水線和並行表函數的信息。 http://docs.oracle.com/cd/E11882_01/appdev.112/e10765/pipe_paral_tbl.htm#ADDCI2140
我沒有試過這個,但是因為你沒有直接將查詢結果作為輸出返回(即你正在執行一個命令),如果你把它包裝在一個PL / SQL塊中怎么辦?
BEGIN
execute immediate 'insert into tblTSVal(stValue, itemKey, props) ' ||
'select * from ' || dbMis.fn_ag_valuesToTable(tsVal);
END;
/
我假設dbMis.fn_ag_valuesToTable是一個函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.