My problem is not with cascading or using recursive triggers. Actually, I am using "sqlite3_create_function" to execute some queries(like insert or update etc.) but the control does not pass to the custom function at all, ie., say a user-defined function sp_dosomethingfunc(sqlite3_context *context, int argc,sqlite3_value **argv) { Do something or execute some queries....... ..................................etc }
/* from main() I'm calling the above function using sqlite3_create_function*/ int main() { /* after using sqlite_open */ sqlite3_create_function(............) /* exec function is executed, but control is not passed to sp_dosomethingfunc, how do I make stmts inside this custom function get executed? */ sqlite3_exec(.........) } /* and this sp_dosomethingfunc, I'm calling from triggers. I'm not getting any error. But this function is not executed */ Pls do reply ASAP. -----Original Message----- From: Igor Tandetnik [mailto:[EMAIL PROTECTED] Sent: Friday, March 24, 2006 6:38 PM To: SQLite Subject: [sqlite] Re: Stored procedures in triggers A small correction: I was wrong about SQLite not supporting cascading triggers. Cascading triggers are supported, recursive triggers are not. That is, if you have an insert trigger on table A which, say, inserts into table B, and there's an insert trigger on table B, it will run. But if this latter trigger turns around and inserts into table A, the A trigger won't run again. Igor Tandetnik Ran <[EMAIL PROTECTED]> wrote: > See the email of Igor Tandetnik from 18-Dec-2005: > > "Vishal Kashyap" wrote >> Is their any way we can write simple stored procedures or functions >> in sqlite. If yes please do guide me I need this functionality in one >> of my open source project. > > Not in the usual sense, meaning some language that gets stored in the > database itself together with the data. The only thing that comes > somewhat close is a trigger. It is possible to create a poor man's > stored procedure like this: > > create table sp_dosomething (param1 int, param2 char); > create trigger sp_dosomething_impl > instead of insert on sp_dosomething > begin > -- one or more sql statements possibly referring to > -- new.param1 and new.param2 > end; > > -- To invoke: > insert into sp_dosomething values(1, 'hello'); > > > Note that triggers are rather limited in what they can do. They are > just > a bunch of SQL statements, there is no control flow (loops, if then > else, goto) beyond what little you can implement in pure SQL. They > cannot return values, except indirectly by inserting or updating some > table. SQLite does not support cascading triggers, so if your "stored > procedure" manipulates some table to which regular triggers are > attached > (perhaps ensuring data integrity), those triggers won't run. > > > SQLite supports custom functions - see sqlite3_create_function[16]. > You > write them in C (or any other language that has bindings to SQLite > API) > and you have to install them every time you open a DB handle with > sqlite3_open, before you can refer to them in your SQL statements. > They > are not stored in the database file itself. > > Finally, SQLite prepared statements (sqlite_prepare) can be thought of > as simple stored procedures defined in your program. Similar to custom > functions, you can prepare a statement right after opening the > database, > then keep it around. > > Igor Tandetnik > > > > Ran > > > On 3/24/06, Chethana, Rao (IE10) > <[EMAIL PROTECTED]> wrote: >> >> Hi, >> >> Can you tell me how to create a stored procedure in an sqlite3 >> database and use the same in a trigger? Please provide an example >> (as complete as possible). In the stored procedure I need to execute >> few queries on some tables. Can you tell me how to do that also? >> >> Any help is deeply appreciated. >> >> Best Regards, >> >> Chethana