![](/img/trans.png)
[英]Oracle: Using a database link in a stored procedure : table or view does not exist
[英]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.