テーブルに UPSERT するためのより良い方法は次のとおりです。
- ~1 行/秒でのデータ アップサート
- テーブル名は動的で、渡された 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 が動的にできないため機能しませんか???
- 私は初心者で、コーディングを始めて 3 か月目です。現在 3 日間、STACKOVERFLOW と Google で検索し、あらゆる種類の面白くて絶望的な解決策を試しています。