On Wed, Oct 15, 2008 at 2:00 PM, D. Dante Lorenso <[EMAIL PROTECTED]> wrote:
> Rob Wultsch wrote:
>>
>> On Wed, Oct 15, 2008 at 12:25 PM, D. Dante Lorenso <[EMAIL PROTECTED]>
>> wrote:
>>>
>>> There's an awesome feature that was added to PostgreSQL a while back
>>> called
>>> RETURNING that allows you to make an INSERT, UPDATE, and DELETE statement
>>> behave like a SELECT statement.  You can do something like this:
>>>
>>>  INSERT INTO mytable (id, value)
>>>  VALUES (1, 'something')
>>>  RETURNING any_column_you_want;
>>>
>>> This would be equivalent to running something like this in MySQL:
>>>
>>>  INSERT INTO mytable (id, value)
>>>  VALUES (1, 'something');
>>>
>>>  SELECT any_column_you_want
>>>  FROM mytable
>>>  WHERE id = 1;
>>>
>>> Here is another example with an UPDATE query:
>>>
>>>  UPDATE mytable SET
>>>   value = 'something'
>>>  WHERE id = 1
>>>  RETURNING id, other_number;
>>>
>>> The nice thing about this is that every insert or update can return any
>>> column you want (even multiple columns) without having to do the
>>> INSERT/UPDATE then turn around and perform another SELECT query.
>>>
>>> I want to use this because when I insert a value into a table, I don't
>>> always want to get the primary key returned to me.  Sometimes I want
>>> another
>>> column which may contain a candidate key and I'd like to avoid the
>>> round-trip and additional logic incurred with running multiple queries.
>>>
>>> Does RETURNING exist in any current release of MySQL or is it on the TODO
>>> list even?  If it's not, how can I go about asking to have it put on
>>> there?
>>>
>>> -- Dante
>>>
>>> ----------
>>> D. Dante Lorenso
>>> [EMAIL PROTECTED]
>>
>>
>> You can do your insert through a stored procedure and then at the end
>> do a select of those values.
>>
>>
>> http://dev.mysql.com/doc/refman/5.0/en/faqs-stored-procs.html#qandaitem-22-4-14
>> "22.4.14:  Can MySQL 5.0 stored routines return result sets?
>>
>> Stored procedures can, but stored functions cannot. If you perform an
>> ordinary SELECT inside a stored procedure, the result set is returned
>> directly to the client. You need to use the MySQL 4.1 (or above)
>> client-server protocol for this to work. This means that — for
>> instance — in PHP, you need to use the mysqli extension rather than
>> the old mysql extension. "
>
> This is an interesting strategy in that all your queries would turn into
> CALL statements.
>
> There are several reasons why I would NOT want to turn all my queries into
> stored procedures, though.  The main problem I have is that it is difficult
> to deploy stored procedures from DEV to PROD environments and have those
> deployments synchronized with the deployment of the web code.  SQL which is
> kept with the application is easily deployed when the application is
> deployed and the same goes for version control of the SQL if you are using
> something like Subversion to maintain change history.
>
> So, I suppose you CAN perform an UPDATE and run a SELECT from a stored
> procedure, but this strategy is not much better than doing both calls from
> the client and still does not act like the RETURNING feature I was hoping
> for.
>
> -- Dante

For the record I am not a big fan of stored procedures, particularly
because the svn/cvn issues. Also debugging is a bear.

However, what I am suggesting is not to run an update and then a
SELECT ... FROM ...(unless you are using triggers, or a virtual
columns when that is merged, etc) because you will already have all
the values passed in as variables you should be able to do something
like:
SELECT var1 AS 'colname', var2 AS 'col2';

(Note the lack of a FROM clause.)

Alternatively, you could set a user defined variable in insert
triggers and then reuse the variables later on.

Other than the above strategies I think you are probably out of luck.


-- 
Rob Wultsch
[EMAIL PROTECTED]
wultsch (aim)

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to