Thread: Help with function
I need some help with how to define a function. I am trying to create a function that I pass two records into. However, I can not seem to get the syntax correct in the definition. Exactly what I'm doing is having a rule on one of my views call a function and pass the new.* and old.* records to the function. the function will then handle the inserting, updating, and deleting from the underlying tables. I tried to define the function as function_name(new_rec view_name, old_rec view_name), but it abends on the call. function_name(new_rec view_name%rowtype, old_rec view_name%rowtype) will not compile. Can someone please provide some guidance on how to pass the records to my new function? thanks, Chris
Ok, here is a bit more information, When I declare the function as function(view_name, view_name) an try to update my view. I am getting the following errors: ERROR: record type has not been registered CONTEXT: PL/pgSQL function "clmhdr_view_update" while storing call arguments into local variables My rule is doing select function_name(new.*, old.*). What is pg trying say here, and how to I modify my function to fix this? Thanks, Chris On 8/12/05, Chris Hoover <revoohc@gmail.com> wrote: > I need some help with how to define a function. I am trying to create > a function that I pass two records into. However, I can not seem to > get the syntax correct in the definition. > > Exactly what I'm doing is having a rule on one of my views call a > function and pass the new.* and old.* records to the function. the > function will then handle the inserting, updating, and deleting from > the underlying tables. > > I tried to define the function as function_name(new_rec view_name, > old_rec view_name), but it abends on the call. > > function_name(new_rec view_name%rowtype, old_rec view_name%rowtype) > will not compile. > > > Can someone please provide some guidance on how to pass the records to > my new function? > > thanks, > > Chris >
Chris Hoover <revoohc@gmail.com> writes: > I tried to define the function as function_name(new_rec view_name, > old_rec view_name), but it abends on the call. > function_name(new_rec view_name%rowtype, old_rec view_name%rowtype) > will not compile. > Can someone please provide some guidance on how to pass the records to > my new function? Not when you're being so parsimonious with details. Show us the full text of the function and the exact error message you got. Also, I forget which Postgres version you are using --- it matters. regards, tom lane
Chris Hoover <revoohc@gmail.com> writes: > Ok, here is a bit more information, When I declare the function as > function(view_name, view_name) an try to update my view. I am getting > the following errors: > ERROR: record type has not been registered This is an internal bug. Are you running 8.0.3? If so, let's see a complete test case --- if not, please see if updating fixes it. regards, tom lane
Chris Hoover <revoohc@gmail.com> writes: > If I try to do an insert into the mytable_view, everything is happy. > If i try to do an update or delete, I get the error:ERROR: record > type has not been registered > CONTEXT: PL/pgSQL function "mytable_view_update" while storing call > arguments into local variables Well, the good news is this was fixed some time ago in CVS tip ... the bad news is that back-porting the fix to 8.0 doesn't look real practical :-(. In 8.0 it'll only work if you're not using inheritance. regards, tom lane