这里我有一个问题,我需要写一个pl/sql。数据库的结构也是相互联系的。这个问题需要在一个过程中使用一个序列。我是新来的,不知道这是否正常工作,我的exec命令似乎不工作,请帮助我。另外,这是如何查找序列应该从中开始的max/u id,还是我可以在create sequence中选择一个?
编写一个名为insert\u direct\u holder的pl/sql过程,用于插入新的direct holder。创建一个序列以自动生成用户ID。在程序中使用此顺序-输入参数:名、姓
DROP SEQUENCE shareholder_id_seq;
SELECT
MAX(shareholder_id)
FROM shareholder;
CREATE SEQUENCE shareholder_id_seq
INCREMENT BY 1
START WITH 25;
CREATE OR REPLACE PROCEDURE insert_direct_holder(
p_first_name in direct_holder.first_name%type,
p_last_name in direct_holder.last_name%type)
IS
v_shareholder_id NUMBER(6);
BEGIN
INSERT INTO DIRECT_HOLDER(direct_holder_id,first_name,last_name) values(shareholder_id_seq.nextval, p_first_name, p_last_name);
INSERT INTO shareholder (shareholder_id, type) VALUES (shareholder_id_seq.nextval,'Direct_Holder');
COMMIT;
END;
/
/* test command*/
exec insert_direct_holder( p_first_name, p_last_name );
2条答案
按热度按时间mcdcgff01#
您需要在两个表中插入具有相同id的记录。另外,您需要先将记录插入父表(股东),然后再插入子表(直接持有人)。
xurqigkl2#
序列只创建一次,以实现任何数字列的自动递增功能。对于当前用例,它必须只创建一次,并且希望永远保留。如果需要,可以在将来修改序列。
如果股东表中已有记录,则创建起始值为的序列
SELECT MAX(shareholder_id) + 1 FROM shareholder;
以避免主键约束冲突。存储过程需要稍加修改才能使用相同的方法
SHAREHOLDER.SHAREHOLDER_ID
因为列与DIRECT_HOLDER
.使用
INSERT ALL
为同一序列插入两个表。nextval。dbfiddle演示与工作代码:https://dbfiddle.uk/?rdbms=oracle_18&fiddle=5d80488fb69d78d4b5087f06a5becf96