2 つの Oracle テーブルがあります。
CREATE TABLE MANAGEDSYSTEMS(
MSYSTEMID INTEGER NOT NULL,
MSYSTEMGROUPID INTEGER,
SPECIALNUMBER VARCHAR2(40 ),
SERIALNUMBER VARCHAR2(30 ),
MSYSTEMSTATUS VARCHAR2(30 ),
MSYSTEMNAME VARCHAR2(60 ),
IPADDRESS VARCHAR2(30 ),
DATEMSYSTEMADDED TIMESTAMP(6),
DESCRIPTION CLOB
)
/
-- ADD KEYS FOR TABLE MANAGEDSYSTEMS
ALTER TABLE MANAGEDSYSTEMS ADD CONSTRAINT MSKEY PRIMARY KEY (MSYSTEMID)
/
CREATE TABLE AGENTS(
AGENTID INTEGER NOT NULL,
MSYSTEMID INTEGER,
AGENTGROUPID INTEGER,
AGENTSERIALNUMBER VARCHAR2(60 ),
AGENTSTATUS VARCHAR2(30 ),
AGENTOS VARCHAR2(60 ),
AGENTIPADDRESS VARCHAR2(40 ),
LASTSYNC TIMESTAMP(6),
DATEAGENTADDED TIMESTAMP(6),
CPULOADLIMIT INTEGER,
RAMLOADLIMIT INTEGER,
HDDSPACELIMIT INTEGER,
NETWORKUPLIMIT INTEGER,
NETWORKDOWNLIMIT INTEGER,
REPORTUSERLOGINS VARCHAR2(30 ),
CANEXECCOMMANDS VARCHAR2(30 ),
SYNCHRONIZATIONTIME VARCHAR2(30 ),
DATALIMITSPEAKTIMES INTEGER,
DESCRIPTION CLOB
)
/
-- ADD KEYS FOR TABLE AGENTS
ALTER TABLE AGENTS ADD CONSTRAINT AGENTID PRIMARY KEY (AGENTID)
ALTER TABLE AGENTS ADD CONSTRAINT MSYSTEMID FOREIGN KEY (MSYSTEMID) REFERENCES MANAGEDSYSTEMS (MSYSTEMID)
「Agent」を「Managedsystems」テーブルに割り当てたいと考えています。ご覧のとおり、テーブルの外部キーがあります。ユーザーはまず管理対象システムを作成し、次にエージェントを作成する必要があります。しかし、管理対象システムを割り当てずにエージェントを作成するオプションも提供したいと考えています。管理対象システム ID のキーをエージェント テーブルに変更しようとすると、次のエラーが発生します。
Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (ADMIN.MSYSTEMID) violated - parent key not found
空の値を割り当てることはできないようです。この問題を解決するにはどうすればよいですか?
アップデート:
次の SQL ステートメントを使用して、エージェント テーブルを更新します。
String sql = "UPDATE AGENTS "
+ " SET AGENTID = ?, MSYSTEMID = ?, AGENTGROUPID = ?, AGENTSERIALNUMBER = ?, AGENTSTATUS = ?, AGENTOS = ?, AGENTIPADDRESS = ?, "
+ " LASTSYNC = to_timestamp(?, " + ts_template + "), DATEAGENTADDED = to_timestamp(?, " + ts_template + "), "
+ " CPULOADLIMIT = ?, RAMLOADLIMIT = ?, HDDSPACELIMIT = ?, NETWORKUPLIMIT = ?, NETWORKDOWNLIMIT = ?, REPORTUSERLOGINS = ?, "
+ " CANEXECCOMMANDS = ?, SYNCHRONIZATIONTIME = ?, DATALIMITSPEAKTIMES = ?, "
+ " DESCRIPTION = ? WHERE AGENTID = ?";