Обсуждение: 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