Аполлиции для запутанного заголовка и длинной ветви.Заполнение таблицы B данными из таблицы A, если данные в таблице B отличаются от таблицы A
Я пытаюсь заполнить таблицу SQL (Oracle) данными, чтобы я мог регулярно отслеживать ее и создавать изображение, в котором пользователи используют какие-либо модули приложения.
У меня есть таблица «forms_sessions_log», который был создан следующим образом:
create table stuman.forms_sessions_log as (
select a.sid, a.serial#, a.logon_time, a.client_identifier,
a.module,a.username, a.SCHEMANAME, b.SPRIDEN_LAST_NAME, b.SPRIDEN_FIRST_NAME
from gv$session a, spriden b
where program like 'frmweb%'
and a.username=b.spriden_id)
Это создает «снимок» сессий «форм», подключенные к базе данных в данный момент времени.
С этого момента каждую минуту через планировщик заданий я хотел бы продолжать заполнять эту таблицу любыми новыми или разными сеансами.
я придумал следующее:
INSERT INTO stuman.forms_sessions_log
(sid,serial#,logon_time,client_identifier,module,username,SCHEMANAME,SPRIDEN_LAST_NAME,SPRIDEN_FIRST_NAME)
SELECT a.sid,
a.serial#,
a.logon_time,
a.client_identifier,
a.module ,
a.username,
a.SCHEMANAME,
b.SPRIDEN_LAST_NAME,
b.SPRIDEN_FIRST_NAME
FROM gv$session a
spriden b
WHERE a.PROGRAM like 'frmweb%'
AND a.username=b.spriden_id
AND NOT EXISTS(SELECT * FROM stuman.forms_sessions_log)
/
Это, похоже, не работает. Он не смог добавить никаких новых сеансов. Если я усекаю stuman.forms_sessions_log и снова запустим инструкцию insert, он будет заполняться отлично, но затем не будет добавлять новые сессии в таблицу при последовательных попытках.
Я просмотрел код и решил точно настроить инструкцию, используя сравнения в предложении NOT EXISTS.
INSERT INTO stuman.forms_sessions_log
(sid,serial#,logon_time,client_identifier,module,username,SCHEMANAME,SPRIDEN_LAST_NAME,SPRIDEN_FIRST_NAME)
SELECT a.sid,
a.serial#,
a.logon_time,
a.client_identifier,
a.module ,
a.username,
a.SCHEMANAME,
b.SPRIDEN_LAST_NAME,
b.SPRIDEN_FIRST_NAME
FROM gv$session a,
spriden b
WHERE a.PROGRAM like 'frmweb%'
AND a.username=b.spriden_id
AND NOT EXISTS(SELECT a.sid,a.serial#,a.logon_time,a.client_identifier,a.module,a.username,a.SCHEMANAME
FROM stuman.forms_sessions_log a,
gv$session b
WHERE a.sid=b.sid
AND a.serial#=b.serial#
AND a.logon_time=b.logon_time
AND a.client_identifier=b.client_identifier
AND a.module=b.module
AND a.username=b.username
AND a.SCHEMANAME=b.SCHEMANAME
)
/
Это также не делает то, что я ожидал. Я Выделенное НЕ СУЩЕСТВУЕТ часть запроса я хотел проверить, который:
SELECT a.sid,a.serial#,a.logon_time,a.client_identifier,a.module,a.username,a.SCHEMANAME
FROM stuman.forms_sessions_log a,
gv$session b
WHERE a.sid=b.sid
AND a.serial#=b.serial#
AND a.logon_time=b.logon_time
AND a.client_identifier=b.client_identifier
AND a.module=b.module
AND a.username=b.username
AND a.SCHEMANAME=b.SCHEMANAME
Теперь, имейте в виду, что эти определенные поля в таблице как А и В являются идентичными (stuman.forms_session_log была заселена из Гв $ сессии), ничего не возвращается.
У меня есть одна строка stuman.forms_session_log, которая соответствует строке в сеансе gv $.
Почему оператор select выше не возвращает результатов?
Является ли это проблемой MS SQL Server или Oracle? Не помещайте теги, которые не задействованы ... – jarlh
К сожалению, я не вижу тег сервера MSSQL в моем списке тегов – Huskie69
К сожалению, он уже был удален другим пользователем ... – jarlh