繁体   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