Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

The 4th edition of the Campaign Community Lens newsletter is out now!

Update columns having a composite primary key

Avatar

Level 2

Hi Experts,

I'm facing an issue while updating a table. Below's the log (Namespace & tablename masked):

05/02/2019 11:33:32 AM QUE-370007 Unable to find key values for element 'TABLE_NAME' (document with schema 'TABLE_NAME')

05/02/2019 11:33:32 AM XSV-350023 Unable to save document of type 'NAMESPACE_:TABLE_NAME'.

05/02/2019 11:33:32 AM SOP-330011 Error while executing the method 'Write' of service 'xtk:persist|xtk:session'.

Key is based on 4 columns & I've verified that, data exits on all those columns & they're unique when put together.

Below is the key declaration xml:

<element label="TABLE_NAME" name="TABLE_NAME">

    <key internal="true" name="PrimaryKey">

      <keyfield xpath="@COL1"/>

      <keyfield xpath="@COL2"/>

      <keyfield xpath="@COL3"/>

      <keyfield xpath="@COL4"/>

    </key>

Below is the update statement:

xtk.session.Write(

            <TABLE_NAME

            xtkschema="NAMESPACE_:TABLE_NAME" _operation="update" _key="@COL1,@COL2,@COL3,@COL4"

             <<columns that required update>>

            />);

Pls. let e know. TIA

4 Replies

Avatar

Level 5

Hi,

in the doc (Elements and attributes  : <key> element) it explicitly says :

"A key is known as composite if it includes several fields (i.e. several <keyfield> children). Do not use a composite key to define a primary key."

I would recommand using the autopk="true" and a creating a unique index constraint for the fields you wanted as a composite primary key :

<dbindex name="myIndex" label="My index on my 4 fields" unique="true">

  <keyfield xpath="@COL1"/>

  <keyfield xpath="@COL2"/>

  <keyfield xpath="@COL3"/>

  <keyfield xpath="@COL4"/>

</dbindex>

Kind regards,

Pierre

Avatar

Level 2

What i observed in ACM was that if we created any custom PK (single/composite),

it actually creates an Unique index on the columns.

But having autopk="true" will add another column to the table & if it's a huge table, we're going consume extra space for it.

I was able to solve this by modifying the JS update code.

Thanks for the reply

Avatar

Level 3

Can you help us with solution. I am facing same issue.

Avatar

Level 2

Hello,

I tried the below code, it worked.

var jsonData = {"col1" : "a", "col2" : "b", "col3" : "c", "col4" : "d", "col5" : "e"}

 

var xml = <TABLE_NAME xtkschema="NAMESPACE_:TABLE_NAME" _operation="insertOrUpdate" _key="@Col1,@COL2,@COL3,@COL4" @Col1 ={jsonData.col1} @COL2 ={jsonData.col2} @COL3 ={jsonData.col3} @COL4 ={jsonData.col4} @COL5 ={jsonData.col5}/>;
xtk.session.Write(xml);