create or replace procedure pchiralify (smi varchar2) is pragma autonomous_transaction; -- allows insert ism_list varchar2(32767); -- output of chiralify progob ism varchar2(4000); -- isomer (asmiles) nl number := 0; -- first \n nl2 number := 1; -- second \n i number := 0; -- loop counter begin ism_list := c$dcischem.ddpackage.fprogob('chiralify', smi); loop if i = 0 then --first line doesn't begin with a \n nl := instr(ism_list, chr(10) , 1, 1 ); --ascii 10 is \n (line feed) nl2 := nl; ism := substr(ism_list, 1 , nl-1); else nl := instr(ism_list, chr(10) , 1, i ); nl2 := instr(ism_list, chr(10) , 1, i+1 ); ism := substr(ism_list, nl+1 , nl2-nl); end if; EXIT WHEN nl2 = 0; insert into asmiles_table (ASMILES) values (ism); commit; i := i+1; end loop; end pchiralify; / create or replace trigger add_asmiles after insert or update of usmiles on usmiles_table for each row begin pchiralify(:new.usmiles); end add_smiles; /