簡體   English   中英

Oracle存儲過程中的表變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM