On 2/17/14 2:03 AM, John English wrote:
On 17/02/2014 11:29, Bob M wrote:
Hi John

I am having difficulty following your latest message.........sorry :(

I don't understand where to give constraints names?
Is it when I set up the table?

Yes, replace PRIMARY KEY(x) with CONSTRAINT c PRIMARY KEY(x) in the table definition. See http://db.apache.org/derby/docs/10.1/ref/rrefsqlj42154.html

derby.properties - I have no idea where / what that is?

Create a file in the startup directory (where derby.log should also be) containing this line:

  derby.language.logStatementText=true

See http://db.apache.org/derby/docs/10.1/tuning/ctunsetprop13074.html

HTH,
If you haven't named a constraint, then its system-generated name should be the same as the name of the system-generated index which backs the constraint. You should be able to use DatabaseMetaData.getIndexInfo() to retrieve enough information to figure out which one is being violated. The following script shows how to do this:

connect 'jdbc:derby:memory:db;create=true';

create table t1( z int primary key );
create table t2( x int not null unique, y int primary key, z int references t1( z ) );

call syscs_util.syscs_register_tool( 'databaseMetaData', true );

select substr( index_name, 1, 36 ), substr( column_name, 1, 36 ), ordinal_position
from table( getIndexInfo( null, 'APP', 'T2', false, false ) ) s
order by index_name, ordinal_position;

call syscs_util.syscs_register_tool( 'databaseMetaData', false );

Hope this helps,
-Rick

Reply via email to