我有一张桌子:
create table osoba (osoba_id number,
ime_osobe varchar2(200),
prezime_osobe varchar2(200),
kartica_id number)
create table kartica (kartica_id number,
dozvoljen_ulaz_id number)
我需要制作
的程序osoba
。kartica
列kartica_id
中是否有数据。
kartica_id
中的列osoba
。kartica_id
表中添加kartica
,然后将新创建的kartica.kartica_id
添加到表{{1}中的kartica_id
}}。osoba
中的{p> Kartica_id
和kartica
中的kartica_id
必须是唯一的,osoba
中的一条记录只有一个kartica_id
才能获得该记录(人补充说)。
如果已将osoba
添加到相同值的kartica_id
,则抛出错误消息osoba.kartica_id
并将下一个新'Kartica_id already exists. No same values allowed.'
值插入kartica_id
表并将该值传递给表kartica
中的kartica_id
。
我是pl / sql的新手,所以这是我到目前为止的地方:
osoba
答案 0 :(得分:0)
我正在发布解决方案,我使用kartica_seq
作为kartica_id
的序列。请将其替换为您的序列名称或创建序列(如果不存在)。
create sequence kartica_seq start with 1 increment by 1;
create or replace procedure insertOsoba
( o_osoba_id in osoba.osoba_id%type default generate_id.nextval,
o_ime_osobe in osoba.ime_osobe%type,
o_prezime_osobe in osoba.prezime_osobe%type,
o_kartica_id in kartica.kartica_id%type default null --must be optional
)
is
cnt number;
cnt2 number;
begin
select count(*) into cnt from osoba where kartica_id = o_kartica_id;
select count(*) into cnt2 from kartica where kartica_id = o_kartica_id;
if(cnt = 0) then
--there is no person with such kartica and user passed existing kartica_id
if(o_kartica_id is not null and cnt2 > 0) then
insert into osoba (osoba_id,ime_osobe,prezime_osobe,kartica_id)
values (o_osoba_id,o_ime_osobe,o_prezime_osobe,o_kartica_id);
--there is no person with such kartica but we need to create one entry using sequence
else
insert into kartica (kartica_id) values (kartica_seq.nextval);
insert into osoba (osoba_id,ime_osobe,prezime_osobe,kartica_id)
values (o_osoba_id,o_ime_osobe,o_prezime_osobe,kartica_seq.currval);
end if;
end if;
--there is person with such kartica
if(cnt > 0) then
dbms_output.put_line('Kartica_id already exists. No same values allowed.'); --or raise an exception here
end if;
commit;
end insertosoba;