Multi-statements SQL and stored_procedure calls

From: SerGioGio <nospam>
Date: Sun, 8 May 2005 14:22:20 +0200
Message-ID: <427e0474$1_at_news.starhub.net.sg>



Hello guys,

I would like my app to generate and execute cross platform (sybase and oracle) multi-statement SQL in the form:

(situation A)

SQL += BEGIN();
SQL += SP("my_stored_proce", "arg1, arg2, arg3") + EOS();
SQL += "INSERT INTO my_table VALUES(1)" + EOS();
SQL += END();

dbExecute(SQL); // ODBC

or only:

(situation B)
SQL = SP("my_stored_proce", "arg1, arg2, arg3") dbExecute(SQL); // ODBC

In sybase, the functions BEGIN, END, SP, and EOS are: BEGIN() returns "BEGIN"
END() returns "END"
SP(my_sp, args) returns "EXEC " + my_sp + " " + args EOS() returns "\n"

In oracle, I define these functions:
BEGIN() returns "BEGIN"
END() returns "END;"
EOS() returns ";\n"

But the problem is with the definition of SP
- if SP(my_sp, args) returns "EXEC " + my_sp + " (" + args + ")"
then (situation B) works but (situation A) fails because apparently you cannot have EXEC inside a begin...end block
- if SP(my_sp, args) returns my_sp + " (" + args + ")"
then (situation A) works but (situation B) fails because oracle does not understand this is a sp call
- if SP(my_sp, args) returns "BEGIN "my_sp + " (" + args + "); END;"
then (situation B) works but (situation A) fails because you can't have 2 semi columns (;;) in a statement.

Does anyone have any suggestions of how one could define SP so that it works in both situations above (A and B)?

Many thanks in advance & Regards,

SerGioGioGio Received on Sun May 08 2005 - 14:22:20 CEST

Original text of this message