>
> Assuming I have set up a sequence called 'seq', and set the default value of
> id in foo to be nextval('seq'), then the following is getting close to what
> I need (there seems to be only one thing left - what do I replace the
> question mark with in order to get the id value from the initial select and
> pass it to the insert in the first block):
>
> if exists(select id from foo where x = "text") then
> INSERT INTO foo2 (foo_id, foo2_text) VALUES (?,"more_text")
> else
> INSERT INTO foo (text) VALUES ('text')
> INSERT INTO foo2 (foo_id, foo2_text) VALUES (currval('seq'),
> "more_text")
> end if;
>
> The second block of the conditional statement looks like it ought to
> properly handle inserting new data into foo, autoincrementing id in foo and
> providing the value of id to the insert into foo2. However, for the first
> block, there is no way to know where 'text' is located in the table, so it
> is necessary to get the value of id from the SQL statement used as the
> argument for exists() and pass it to the insert into foo2 (where the
> question mark is located).
>
> Thanks for your time.
>
> Ted
>
maybe you can rewrite this to something else:
in the declare section declare a var
declare
var1 foo.id%TYPE;
[...and then in the begin section, where all code happens...]
select into var1 id from foo where x = "text";
if var1 is not null then
INSERT INTO foo2 (foo_id, foo2_text) VALUES (var1,"more_text")
else
INSERT INTO foo (text) VALUES ('text')
INSERT INTO foo2 (foo_id, foo2_text) VALUES (currval('seq'),
"more_text")
end if;
--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)