我正在使用以下 SQL 插入陳述句將值插入表中MY_DATA,但在這里我想根據列中的資料添加檢查該行是否已存在CREATED_AT。
INSERT INTO MY_DATA (SITE_ID, USER_NAME, USER_NO, CREATED_AT)
VALUES (:siteId, :userName, :userNo, :createdAt)
在這里,如果我嘗試在CREATED_AT表中插入具有相同值的行,則不應插入該行。
使用適用于資料庫的 Oracle SQL 開發人員。
請幫助我是新來的。
uj5u.com熱心網友回復:
使用MERGE宣告:
MERGE INTO MY_DATA dst
USING DUAL
ON (dst.created_at = :created_at)
WHEN NOT MATCHED THEN
INSERT (SITE_ID, USER_NAME, USER_NO, CREATED_AT)
VALUES (:siteId, :userName, :userNo, :createdAt);
您可以創建索引以防止多次插入具有相同的CREATED_AT值:
CREATE UNIQUE INDEX my_data__created_at__u ON my_data (created_at);
如果你有,那么你可以在 PL/SQL 陳述句中使用你的查詢并捕獲例外(然后忽略它,報告它或做任何需要的事情):
BEGIN
INSERT INTO MY_DATA (SITE_ID, USER_NAME, USER_NO, CREATED_AT)
VALUES (:siteId, :userName, :userNo, :createdAt);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
-- Handle the exception
NULL;
END;
/
uj5u.com熱心網友回復:
我認為您只需要在 CREATE_AT 列上的表上創建一個 UNIQUE INDEX -
CREATE UNIQUE INDEX idx_unq_created_at
ON MY_DATA (created_at);
之后,您無需在查詢中執行任何操作。該索引將注意不會將重復值插入到表中的 created_at 列中。
uj5u.com熱心網友回復:
一種選擇是使用合并,例如
merge into my_data a
using (select :siteId site_id,
:userName user_name,
:userNo user_no,
:createdAt created_at
from dual
) b
on (a.created_at = b.created_At)
when not matched then
insert (site_id, user_name, user_no, created_at)
values (b.site_Id, b.user_Name, b.user_No, b.created_At);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516039.html
標籤:sql甲骨文
上一篇:獲取存盤在不同表中的列名
