簡體   English   中英

在Oracle存儲過程中使用表變量

[英]Using table variables in Oracle Stored Procedure

我在T-SQL(MS SQL Server)方面有豐富的經驗。

首先選擇一些記錄集到一個記錄中是很普遍的。
表變量或說臨時表t ,然后使用此t
像常規表(用於JOINS,子查詢等)一樣在整個SP主體中使用它。

現在,我在Oracle中嘗試相同的操作,但這很痛苦。 我一直都有錯誤,而且一直在說
它無法識別我的表格(即我的表格變量)。

Error(28,7): PL/SQL: SQL Statement ignored
Error(30,28): PL/SQL: ORA-00942: table or view does not exist

我開始考慮使用此表變量根本有什么可能(在SP主體中)不能做什么?

我有這個聲明:

TYPE V_CAMPAIGN_TYPE IS TABLE OF V_CAMPAIGN%ROWTYPE; 
tc V_CAMPAIGN_TYPE;

我現在可以在我的SP中使用此tc在地球上做什么?

這就是我要在SP主體中執行的操作。

  UPDATE ( SELECT t1.STATUS_ID, t2.CAMPAIGN_ID
            FROM V_CAMPAIGN t1
            INNER JOIN tc t2 ON t1.CAMPAIGN_ID = t2.CAMPAIGN_ID
            ) z
  SET z.STATUS_ID = 4;

V_CAMPAIGN是一個數據庫視圖, tc是我的表變量

大概您正在嘗試更新V_CAMPAIGN記錄的子集。 在SQLServer中,定義一個包含子集的“臨時”表,然后對其進行操作可能會很有用,因為這在Oracle中是不必要的。 只需使用將用於定義臨時表的where子句更新表。 例如

UPDATE v_campaign z
   SET z.status_id = 4
 WHERE z.column_name = 'a value'
   AND z.status <> 4

我假設您熟悉的技術是最大程度地減少選擇數據時讀取鎖定的影響。 Oracle使用不同的鎖定策略,因此該技術幾乎是不必要的。

在上面回盪一番評論-告訴我們您想在Oracle中實現什么,您將獲得有關最佳前進方式的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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