db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bryan Pendleton (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-4) "order by" is not supported for "insert ... select"
Date Fri, 25 May 2007 17:53:16 GMT

    [ https://issues.apache.org/jira/browse/DERBY-4?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12499187
] 

Bryan Pendleton commented on DERBY-4:
-------------------------------------

As Christian noted, one way for users to work around this limitation is to use
a stored procedure. In my experiments, I found that a procedure such as the
following can work acceptably:

public static final void insertSelectOrderBy(String iString, String sString) throws SQLException
{
  Connection conn = DriverManager.getConnection("jdbc:default:connection");
  PreparedStatement iStmt = conn.prepareStatement(iString);
  Statement s = conn.createStatement();
  ResultSet rs = s.executeQuery(sString);
  int numParms = iStmt.getParameterMetaData().getParameterCount();
  while (rs.next())
  {
    for (int c = 1; c <= numParms; c++)
      iStmt.setObject(c, rs.getObject(c));
    iStmt.executeUpdate();
  }
  rs.close(); s.close(); iStmt.close(); conn.close();
}

I'm posting this possible workaround in the hopes that others may find it useful.


> "order by" is not supported for "insert ... select"
> ---------------------------------------------------
>
>                 Key: DERBY-4
>                 URL: https://issues.apache.org/jira/browse/DERBY-4
>             Project: Derby
>          Issue Type: New Feature
>          Components: SQL
>            Reporter: Christian d'Heureuse
>            Priority: Minor
>         Attachments: insertOrderBy.diff, insertOrderBy_v2.diff, insertOrderBy_v3.diff,
samples.ij, samples.ij
>
>
> When filling a table with "insert ... select ...", "order by" cannot be specified.
> There is not method to copy a table sorted into another table (except using export/import).
This would be useful to optimize performance for big tables, or to create identity values
that are ascending (related to another column).
> Example:
> create table temp1 (
>    s varchar(10));
> insert into temp1 values 'x','a','c','b','a';
> create table temp2 (
>    i integer not null
>       generated always as identity
>       primary key,
>    s varchar(10));
> insert into temp2 (s)
>    select s from temp1 order by s;
> --> Error: "order by" is not allowed.
> -- trying to use "group by" instead of "oder by":
> insert into temp2 (s)
>    select s from temp1 group by s;
> select * from temp2;
> --> "group by" did not sort the table.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message