Re: Uniform UPDATE queries
От | Rob Sargent |
---|---|
Тема | Re: Uniform UPDATE queries |
Дата | |
Msg-id | 4F8ED973.8050305@gmail.com обсуждение исходный текст |
Ответ на | Uniform UPDATE queries (Dennis <dennis.verbeek@victorem.com>) |
Список | pgsql-sql |
On 04/18/2012 04:11 AM, Dennis wrote: > When a query is written to update a table, the usual process is to list > all the columns that need updating. This could imply the creation of > many possible queries for many columns. In an effort to keep the UPDATE > queries more uniform, less number of unique queries, a keyword similar > to DEFAULT, let's say CURRENT, is required to indicate that the current > value must not change. > > Examples: > > update mytable set ( d ) = ("newvalue") > > This is the usual way to change values in column "d" and requires > writing a new query for updating every column. > > update mytable set ( a, b, c, d ) = ( a, b, c, "newvalue" ) > > This sort of works to change only column "d", but requires explicit > naming of the columns on the value side. > > My suggestion is to introduce the CURRENT keyword: > > update mytable set ( a, b, c, d ) = ( CURRENT, CURRENT, CURRENT, > "newvalue" ) > > This could then lead to the uniform prepared JDBC statement: > > update mytable set ( a, b, c, d ) = ( ?, ?, ?, ? ) where id = ( ? ); > > And then the JDBC driver could be improved to accept stmt.setString( 4, > "newvalue" ) and automagically substitute the first three parameters > with CURRENT when the query is executed. Note the added WHERE clause? > The parameter for id is always on the same index. This makes the > bookkeeping a lot easier and should reduce the need for generating > UPDATE queries or even client JDBC code. > > -- Dennis Verbeek > Isn't this sort of shenanigans best left "one level up"? The client/app code construct the requisite update statement since it knows which actual columns need updating (i.e. have dirty values). This is actually quite straight forward when using O/R mapping tools such as hibernate or toplink (or whatever oracle calls it now). rjs
В списке pgsql-sql по дате отправления: