спасибо за ответ, отсутствие двойных кавычек заставило меня получить ошибку Missing = sign, сначала я ее не понял, а затем, спустя несколько часов, увидел ваш ответ и пытается обернуть все идентификаторы в двойные кавычки и альт, чтобы проблема была решена,.
лучший способ 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 & Googled уже 3 дня, пробуя всевозможные смешные и отчаянные решения ... Даже очень релевантная ссылка, если вы ее нашли, будет честно оценена.