Freddy, I am assuming that most Oracle Functions should be designed to return one value. If this is true then you could get that value like any other query.
<cfquery name="qry"> Select Max(pk) from tbl </cfquery> So in this case, if the Maximum value in the pk column of the table tbl is 1000 then the statement <cfoutput>#qry.id#</cfoutput> would print 1000. If my assumptions are correct, this should work? Sincerely, Troy freddy wrote: > I would use a stored procedure. Only because I have yet to learn how to connect to a >function in oracle via cf. If this cane be done please let me know > what syntax to use. > > Thanks, > Frederic > > Troy Simpson wrote: > > > Freddy, > > > > I believe that using a stored procedure might be the way to go with this. > > Should I use a Procedure or a Function though? > > > > I was thinking that if I used a function, I could call it like this in a <CFQUERY> >statement: > > > > <cfquery name="qryPK" datasource = "DSN"> > > SELECT > > Add_Record( "My Name" ) AS PrimaryKey > > FROM > > dual > > </cfquery> > > > > Or would using a procedure with IN OUT variables be the better route? > > > > Thanks, > > Troy > > > > freddy wrote: > > > > > You could try: > > > <cftransaction action="BEGIN"> > > > <cfquery name="qryCurrval" datasource = "DSN"> > > > SELECT > > > tbl_seq.nextval as tbl_currval > > > FROM > > > dual > > > </cfquery> > > > > > > <cfquery name="qryInsert" datasource="DSN"> > > > Insert Into tbl( name ) > > > values( 'My Name' ) > > > </cfquery> > > > </cftransaction> > > > > > > I am not sure if this would work but it seems that it would get the nextval >prior to it being assingned using the > > > trigger. > > > > > > Alternately couldn't you also use a stored procedure to insert the the name and >return the curval? > > > > > > Thanks, > > > Frederic > > > > > > Troy Simpson wrote: > > > > > > > Dave, > > > > > > > > Thanks for bring the CURRVAL pseudocolumn to light. > > > > I forgot to mention this part. > > > > I used the NEXTVAL pseudocolumn in the first <CFQUERY> INSERT statement as > > > > follows: > > > > > > > > <cfquery name="qryInsert" datasource="DSN"> > > > > Insert Into tbl( name ) > > > > values( 'My Name' ) > > > > </cfquery> > > > > > > > > I then use another <CFQUERY> to get the value in the CURRVAL pseudocolumn as > > > > follow <cfquery name="qryCurrval" datasource = "DSN"> > > > > SELECT > > > > tbl_seq.currval as tbl_currval > > > > FROM > > > > dual > > > > </cfquery>s: > > > > > > > > > > > > I get the following Oracle error: > > > > > > > > ORA-08002: sequence TBL_SEQ.CURRVAL is not yet defined in this session > > > > > > > > According to the documentation it say this (Pay close attention to the last > > > > sentence): > > > > > > > > When you create a sequence, you can define its initial value and the > > > > increment between its values. The first reference to NEXTVAL returns the > > > > sequence's initial value. Subsequent references to NEXTVAL increment the > > > > sequence value by the defined increment and return the new value. Any > > > > reference to CURRVAL always returns the sequence's current value, which is > > > > the value returned by the last reference to NEXTVAL. Note that before you > > > > use CURRVAL for a sequence in your session, you must first initialize the > > > > sequence with NEXTVAL. > > > > > > > > According to the last sentence, I can only assume that the reason CURRVAL is > > > > not available is because each <CFQUERY> statement creates a new Oracle > > > > Session. Therefore CURRVAL is never available. Also since it is possible > > > > that ColdFusion maintains persistant connects for all web requests, this > > > > might introduce problems. > > > > > > > > I thought that I might be able to put two statements into one <CFQUERY>. > > > > I have not tried this, but I would assume that it is not possible. > > > > > > > > Any other ideas? > > > > Thanks for your input. > > > > > > > > Sincerely, > > > > Troy > > > > > > > > Dave Carabetta wrote: > > > > > > > > > Correct me if I'm wrong, but you should be able to get the current value > > > > > by using currval. For example, from your post, your sequence name is > > > > > tbl_seq. Therefore, you would just type "tbl_seq.currval" to get the > > > > > current value, which should also be the max id value. This is one of > > > > > those really nice feature of Oracle over SQL Server. > > > > > > > > > > Hope this helps, > > > > > Dave. > > > > > > > > > > -----Original Message----- > > > > > From: Troy Simpson [mailto:[EMAIL PROTECTED]] > > > > > Sent: Thursday, December 06, 2001 06:12 PM > > > > > To: CF-Talk > > > > > Subject: Get PK value from Oracle table with AutoNumber Trigger (tds)? > > > > > > > > > > All, > > > > > > > > > > I have read the the various postings about using the MAX() function to > > > > > get the last value entered into the Primary Key field. > > > > > This will not do for me as you will see. > > > > > Plus I believe it is proned to errors. > > > > > > > > > > I have a table that is defined as follows: > > > > > create table tbl ( pk number(11) not null primary key, name varchar2(20) > > > > > ) > > > > > > > > > > I have created a sequences as follows: > > > > > create sequence tbl_seq; > > > > > > > > > > The table has a trigger on the PK column for autonumbering and it is > > > > > defined as follows: > > > > > create trigger tbl_autonumber before insert on tbl for each row > > > > > begin > > > > > select tbl_seq.nextval into :NEW.pk from dual; > > > > > end; > > > > > > > > > > After four people have inserted four seperate new records at the same > > > > > time, how can I find out the Primary Key that was assigned to my new > > > > > record? > > > > > > > > > > Here is a possible solution that I was thinking about but not sure if it > > > > > is the optimal solution. > > > > > Add an additional column to the table and use it as a stamp. > > > > > When I insert the new record I would put a unique number into this > > > > > column so that I can find the record in my next SELECT query. > > > > > > > > > > Ideally, I would like the INSERT statement to return the Primary Key > > > > > value to me. > > > > > Maybe an Oracle procedure or Oracle function would be the way to go. > > > > > > > > > > Sincerely, > > > > > Troy > > > > > > > > > > -- > > > > > Troy Simpson | North Carolina State University > > > > > NCSU Libraries | Campus Box 7111 | Raleigh | North Carolina > > > > > ph.919.515.3855 | fax.919.513.3330 > > > > > > > > > > It is better to be hated for what you are > > > > > than to be loved for what you are not. > > > > > -- Andre Gide > > > > > > > > > > > > > > > > > > > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Your ad could be here. Monies from ads go to support these lists and provide more resources for the community. http://www.fusionauthority.com/ads.cfm FAQ: http://www.thenetprofits.co.uk/coldfusion/faq Archives: http://www.mail-archive.com/[email protected]/ Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists

