NAME_ID
列是NULL
,表table13_prc
中的NAME_ID
是外键,表table_prc4
中的ID
是主键。我想在NAME_ID
列中输出来自table_prc4
的id的令牌。
我的代码是:
Create Table table13_prc (
Family VARCHAR2(200),
Name VARCHAR2(200) ,
ID INTEGER NOT NULL PRIMARY KEY ,
NAME_ID INTEGER REFERENCES TABLE_PRC4(id)
) ;
CREATE SEQUENCE ID_seq5
MINVALUE 1
START WITH 1
INCREMENT BY 1 ;
Create or Replace trigger trg5
BEFORE insert on table13_prc
for each row
BEGIN
select ID_seq5.nextval INTO :new.ID from dual ;
END ;
CREATE OR REPLACE PROCEDURE addnewmem6 (str IN VARCHAR2)
AS
BEGIN
INSERT INTO table13_prc (Name, Family)
WITH
temp
AS
( SELECT REGEXP_SUBSTR (str,
'[^,]+',
1,
LEVEL) val
FROM DUAL
CONNECT BY LEVEL <= REGEXP_COUNT (str, ',') + 1)
SELECT TRIM(SUBSTR(val, 1, INSTR (val, ';') - 1)),
TRIM(SUBSTR(val, INSTR (val, ';') + 1))
FROM temp;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE delete_member2 (par_id IN VARCHAR2)
IS
BEGIN
DELETE FROM table13_prc
WHERE id = par_id;
END;
BEGIN
addnewmem6 ('faezeh;Ghanbarian,pari;izadi');
END;
BEGIN
addnewmem6 ('Saeed;Izadi,Saman; Rostami');
END;
BEGIN
delete_member2 (1);
END;
BEGIN
delete_member2 (2) ;
END;
CALL delete_member2(5);
CALL delete_member2(66);
select *
from table13_prc ;
我想在输出中,列NAME_ID
不是null
,我想在NAME_ID
中取table_prc4
中的id。
2条答案
按热度按时间9jyewag01#
我希望在输出中,列NAME_ID不为空,我希望在NAME_ID中采用table_prc4中的表单ID。
您不能“自动化”它。
table13_prc.NAME_ID
引用table_prc4.ID
,但是INSERT
语句不知道使用 * 哪个 *table_prc4.ID
值。应该由您指定该值。外键约束不允许您插入
table_prc4.ID
中不存在的值(到table13_prc.NAME_ID
中)。idfiyjo82#
您需要从table_prc4中查找正确的name_id:
你也可以在你的insert触发器中这样做,但是无论是在你的insert语句中还是在你的insert触发器中,你都必须以某种方式查找ID值,而Oracle不会为你这样做。