【发布时间】:2019-06-22 14:21:34
【问题描述】:
我对数据库没有太多经验,所以在这种情况下我在这里寻求帮助:
这里的选择语句是检索不在我用来映射将要集成到其他系统中的文档的表中的所有文档,它是一个映射表 (TP_DOC_MAP)。所以我想在我的数据库中创建某种自动化,X 在 X 时间它会运行这个语句,它会插入到我的映射表(TP_DOC_MAP)中。
现在它是手动制作的。我运行这条语句,我会手动插入每条记录,当然没有意义。
(
SELECT DOM_DOCUMENT.DOMAIN_DOC,
TYPE_DOCS.TYPE_DOC_PK,
TYPE_DOCS.TIPO_DOCUMENTO,
TYPE_DOCS.USERCODE,
TYPE_DOCS.CODE_RESULT
FROM TYPE_DOCS
JOIN DOM_TDOC_SIS
ON TYPE_DOCS.TYPE_DOC_PK = DOM_TDOC_SIS.TYPE_DOC_PK
JOIN DOM_DOCUMENT
ON DOM_TDOC_SIS.DOMAIN_DOC_PK = DOM_DOCUMENT.DOMAIN_DOC_PK
WHERE DOM_DOCUMENT.DOMAIN_DOC_PK IN (2, 10) -- (QLD = | PRD = 2)
"motive docs" -- (QLD = 63 | PRD = 10) "Consent. docs"
AND NOT EXISTS
(
SELECT 1
FROM TP_DOC_MAP
WHERE TP_DOC_MAP.LS_LOCAL_PK = 8
AND TP_DOC_MAP.LS_SYSTEM_PK = 3 -- system type
AND TP_DOC_MAP.ACTIVE = 1 -- Mapping all the active
documents
AND TP_DOC_MAP.CODE = TYPE_DOCS.TYPE_DOC_PK --"not e
xists" junction
))
INSERT INTO TP_DOC(CODIGO, NAME, ACTIVE, CREATEDAT, UPDATEDAT) VALUES
('TPDOC_23', 'Report for intrusive function', 1, SYSDATE, NULL);
INSERT INTO TP_DOC_MAP (TP_DOCUMENT_PK, LS_LOCAL_PK, LS_SYSTEM_PK, CODE,
ACTIVE, CREATEDAT, UPDATEDAT) VALUES ((SELECT TP_DOCUMENT_PK FROM TP_DOC
WHERE CODE = 'TPDOC_23'), (SELECT LS_LOCAL_PK FROM LS_LOCAL WHERE CODE =
'IPE'), (SELECT LS_SYSTEM_PK FROM LS_SYSTEM WHERE CODIGO = 'MDS'), '21',
1, SYSDATE, NULL);
所以我不想创建一个数据库例程来自动执行此操作。
【问题讨论】:
-
INSERT INTO SELECT 声明就是你要找的。span>
-
我正在考虑在 Oracle 中创建一个计时器来实现这一点,但在这种情况下如何使这个动态:TP_DOC_MAP.LS_LOCAL_PK = 8 在这种情况下是 8,但我正在映射文档仅限于某些 LS_LOCAL_PK,我该如何设置这个动态?
标签: sql oracle sql-insert