【发布时间】:2011-10-09 09:28:45
【问题描述】:
提供任何更好的将 UPSERT 插入表格的方法:
- 数据更新插入速度约为 1 行/秒
- 表名称是 DYNAMIC,使用传递给它的 ObjectID 参数生成
以下程序抛出: "ORA-00942: 表或视图不存在"
CREATE OR REPLACE PROCEDURE
PROCEDURE "SPINSERTDATA"
(
pObjectID IN RAW,
pDateTime IN TIMESTAMP,
pValue IN BINARY_DOUBLE,
)
AS
BEGIN
Declare
vQueryInsert VARCHAR2(1000);
vQueryUpdate VARCHAR2(1000);
vTableName VARCHAR2(30);
Begin
vTableName := FGETTABLENAME(POBJECTID => pObjectID);
vQueryUpdate := 'UPDATE ' || vTableName || ' SET "VALUE" = :1';
vQueryInsert := 'INSERT INTO ' || vTableName || ' ("DTTIME", "VALUE") VALUES (:1, :2)';
EXECUTE IMMEDIATE vQueryInsert USING pDateTime, pValue;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
EXECUTE IMMEDIATE vQueryUpdate USING pValue;
End;
END "SPINSERTDATA";
- 显然 MERGE 不起作用,因为 TableName 不能是动态的 ???
- 我是一个新手,我编码的第三个月,我通过了 STACKOVERFLOW & Google 搜索了 3 天,尝试各种有趣的 & 绝望的解决方案......如果你找到了一个非常相关的链接 将不胜感激。
【问题讨论】:
-
@Frank Schmitt、Rajesh Chamarthi 和 Gary Myers ========================== ========================== 非常感谢您的回复 ========= ============================================ 这真的很有趣,因为我实际上我不仅必须完全基于 Frank Schmitt 的 脚本重新编写程序,然后遇到了一些问题,Rajesh's 和 Gary's 都完全解决了这些问题 答案,就像答案有某种远见一样。再次感谢你们。
标签: c# sql oracle dynamic upsert