Key constraints on REF
Forigen Key constraints on nested table column:
What can I do to prevent a REF stored in a nested table becoming dangling? I tried using a forigen key constraint on nested table column but failed with (ORA-30730: referential constraint not allowed on nested table column). Why it is not allowed?
Unique for REF column:
My another question is why a REF column of a table cannot be unique/ used as a primary key (ORA-02329: column of datatype REF cannot be unique or a primary key)? I want to make sure that the same REF will not appear in the column twice. What can I do?
Thank you for the answering.
The only solution is to follow Tom Kyte's advice.
Store relationally and build object views.
It is very good advice.
Similar Messages
-
I have migrated my SCCm 2007 environment to SCCM 2012 SP1 CU4.
I noticed in the System Status\Component Status\SMS_STATE_SYSTEM a lot of errors like the one below:
Microsoft SQL Server reported SQL message 2627, severity 14: [23000][2627][Microsoft][SQL Server Native Client 11.0][SQL Server]Violation of PRIMARY KEY constraint 'DeploymentSummary_PK'. Cannot insert duplicate key in object 'dbo.DeploymentSummary'. The duplicate key value is (1, 0, S0220438, 0). : spUpdateClassi
Please refer to your Configuration Manager documentation, SQL Server documentation, or the Microsoft Knowledge Base for further troubleshooting information.
When looking up the deployment ID and recreate the Deployment the problem is solved. But I have 700 packages and don't want to manually do this action on all packages. I think it is related to the migration i did and something went wrong there :-(
Besides it will retriggers the deployment to the clients which is also not preferred.
Is there another way to solve this by e.e.g do something directly in the SQL database tables ?Hi,
It is not supported by Microsoft that do something directly in SQL database.
If you want to do that, you could make a call to CSS.
Best Regards,
Joyce
We
are trying to better understand customer views on social support experience, so your participation in this
interview project would be greatly appreciated if you have time.
Thanks for helping make community forums a great place. -
Wrong order foreign key constraints
Hi,
i have problems with non-deferred foreing key constraints:
I have a table "PERSON" and a table "ADRESSE" which has a foreign key
to "PERSON". Both tables have primary keys with two columns.
In the mappings I use application identity. The mappings are generated by
xdoclet.
We cannot use deferred constraint because we have to support following
databases: Oracle, Firebird, MS SQL, DB2.
I tested the mappings with Oracle and Firebird and got this exception
(with SQL Trace):
5602 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (1 errors)>
[15 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 1, (String) [email protected], (String)
04941 183742, (int) 12761, (int) 1, (int) 1, (String) 0171 2846751,
(String) Oldenburg, (int) 12760, (String) 26129, (int) 1, (null) null,
(String) Ammerl__nder Heerstra__e 19, (String) 04941 183740] [reused=0]
5602 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (2 errors)>
[0 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 3, (null) null, (null) null, (int) 12764,
(int) 1, (int) 0, (null) null, (String) Sylt, (int) 12759, (String) 25980,
(int) 0, (null) null, (String) Stephanstra__e 47, (String) 04651 19283]
[reused=1]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (2 errors)>
[0 ms] executing prepstmnt 13390902 INSERT INTO VAMP.PERSON (ANREDEID, ID,
KUNDENNR, LOESCHBEMERKUNG, MANDANTID, NAME1, NAME2, PERSONENDATUM,
PERSONENORT, TYP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [params=(null)
null, (int) 12759, (String) 9999452800, (null) null, (int) 1, (String)
Horstmann, (String) Manfred, (Timestamp) 1959-03-10 00:00:00.381, (String)
Flensburg, (int) 1] [reused=0]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (2 errors)>
[0 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 1, (String) [email protected], (String)
04941 183742, (int) 12763, (int) 1, (int) 1, (String) 0171 2846751,
(String) Oldenburg, (int) 12759, (String) 26129, (int) 1, (null) null,
(String) Ammerl__nder Heerstra__e 19, (String) 04941 183740] [reused=2]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 3, (null) null, (null) null, (int) 12762,
(int) 1, (int) 0, (null) null, (String) Sylt, (int) 12760, (String) 25980,
(int) 0, (null) null, (String) Stephanstra__e 47, (String) 04651 19283]
[reused=3]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 13390902 INSERT INTO VAMP.PERSON (ANREDEID, ID,
KUNDENNR, LOESCHBEMERKUNG, MANDANTID, NAME1, NAME2, PERSONENDATUM,
PERSONENORT, TYP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [params=(null)
null, (int) 12760, (String) 9999452801, (null) null, (int) 1, (String)
Horstmann, (String) Christine, (Timestamp) 1972-03-10 00:00:00.381,
(String) Erfurt, (int) 1] [reused=1]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 11320634 INSERT INTO VAMP.NATPERSON
(ANZAHLKINDER, ARBEITGEBERID, BEITRAGSSATZ, BERUFID, BRANCHEID,
FAMILIENSTAND, FAMSTANDSEIT, FINANZAMTID, GEBIETSFREMDERAWG, GUETERSTAND,
IDBEHOERDE, IDNR, KIRCHENSTEUER, KVID, MANDANTID, PERSONID, PRIVATKV,
STAAT, STEUERBERATERID, STEUERKLASSE, STEUERNR, STEUERTARIF, TITEL) VALUES
[params=(int) 0, (null) null, (double) 0.0, (null) null, (int) 12410,
(int) 2, (Timestamp) 1991-12-12 00:00:00.381, (null) null, (int) 0, (int)
3, (null) null, (null) null, (int) 0, (int) 12576, (int) 1, (int) 12760,
(int) 0, (null) null, (null) null, (int) 0, (null) null, (int) 1, (null)
null] [reused=0]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 11320634 INSERT INTO VAMP.NATPERSON
(ANZAHLKINDER, ARBEITGEBERID, BEITRAGSSATZ, BERUFID, BRANCHEID,
FAMILIENSTAND, FAMSTANDSEIT, FINANZAMTID, GEBIETSFREMDERAWG, GUETERSTAND,
IDBEHOERDE, IDNR, KIRCHENSTEUER, KVID, MANDANTID, PERSONID, PRIVATKV,
STAAT, STEUERBERATERID, STEUERKLASSE, STEUERNR, STEUERTARIF, TITEL) VALUES
[params=(int) 0, (null) null, (double) 0.0, (int) 12362, (int) 12378,
(int) 2, (Timestamp) 1991-12-12 00:00:00.381, (null) null, (int) 0, (int)
3, (null) null, (null) null, (int) 0, (int) 12576, (int) 1, (int) 12759,
(int) 0, (null) null, (null) null, (int) 0, (null) null, (int) 1, (null)
null] [reused=1]
5634 TRACE [main] kodo.jdbc.JDBC - <t 26577913, conn 33108879 (3
errors)> [16 ms] rollback
5634 TRACE [main] kodo.jdbc.JDBC - <t 26577913, conn 33108879 (3
errors)> return
5634 TRACE [main] kodo.jdbc.JDBC - <t 26577913, conn 33108879 (3
errors)> [0 ms] close
com.solarmetric.jdbc.ReportingSQLException: ORA-02291: integrity
constraint (VAMP.ADRESSE_PS) violated - parent key not found
{prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART, EMAIL, FAXNR,
ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ, POSTADRESSE,
POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?) [params=(int) 1, (String) [email protected], (String) 04941
183742, (int) 12761, (int) 1, (int) 1, (String) 0171 2846751, (String)
Oldenburg, (int) 12760, (String) 26129, (int) 1, (null) null, (String)
Ammerl__nder Heerstra__e 19, (String) 04941 183740] [reused=0]} [code=2291,
state=23000]
at
com.solarmetric.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:124)
at
com.solarmetric.jdbc.LoggingConnectionDecorator.access$600(LoggingConnectionDecorator.java:19)
at
com.solarmetric.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:728)
at
com.solarmetric.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:362)
How can I force it to insert in the table "NATPERSON" first and then in
the table "ADRESSE"?
I use following JDBC-drivers:
Firebird: 1.5.5
Oracle: 9.2.0.1.0
My property file:
<!-- standard properties for all dbms -->
<prop key="kodo.LicenseKey">LICENSE KEY REMOVED</prop>
<prop key="kodo.ConnectionFactoryProperties">MaxCachedStatements=150,
MaxActive=50, MaxIdle=50</prop>
<prop key="kodo.FetchBatchSize">200</prop>
<prop key="kodo.DataCache">true(CacheSize=5000)</prop>
<prop key="kodo.RemoteCommitProvider">sjvm</prop>
<prop key="kodo.jdbc.MappingFactory">metadata</prop>
<prop key="kodo.jdbc.ForeignKeyConstraints">true</prop>
<prop key="kodo.jdbc.SchemaFactory">native</prop>
<prop
key="javax.jdo.PersistenceManagerFactoryClass">kodo.jdbc.runtime.JDBCPersistenceManagerFactory</prop>
<prop key="javax.jdo.option.Optimistic">true</prop>
<!-- oracle connection properties -->
<prop key="kodo.jdbc.DBDictionary">oracle</prop>
<prop
key="javax.jdo.option.ConnectionDriverName">oracle.jdbc.driver.OracleDriver</prop>
<prop key="javax.jdo.option.ConnectionURL">..</prop>
<prop key="javax.jdo.option.ConnectionUserName">..</prop>
<prop key="javax.jdo.option.ConnectionPassword">..</prop>
<prop key="kodo.jdbc.SequenceFactory">native</prop>
<prop key="kodo.jdbc.Schemas">..</prop>
<!-- firebird connection properties
<prop key="kodo.jdbc.DBDictionary">kodo.jdbc.sql.FirebirdDictionary</prop>
<prop
key="javax.jdo.option.ConnectionDriverName">org.firebirdsql.jdbc.FBDriver</prop>
<prop key="javax.jdo.option.ConnectionURL">..</prop>
<prop key="javax.jdo.option.ConnectionUserName">..</prop>
<prop key="javax.jdo.option.ConnectionPassword">..</prop>
<prop key="kodo.jdbc.SequenceFactory">native(TableName=SYSDUAL,
Format="SELECT GEN_ID({0},1) FROM {1}")</prop>
-->
My database schema looks like this:
TABLE PERSON
FIELD MANDANTID (SMALLINT REQUIRED COMMENT (""))
FIELD ID (AUTOINC COMMENT (""))
FIELD TYP (SMALLINT REQUIRED COMMENT (""))
FIELD KUNDENNR (CHAR(15) COMMENT ("Kundennummer"))
PRIMARY KEY
FIELD MANDANTID
FIELD ID
FOREIGN KEY MD
TABLE MANDANT
FIELD MANDANTID
INDEX KDNR
FIELD MANDANTID
FIELD KUNDENNR
UNIQUE
TABLE ADRESSE
FIELD MANDANTID (SMALLINT REQUIRED COMMENT (""))
FIELD ID (AUTOINC COMMENT (""))
FIELD PERSONID (LONGINT REQUIRED COMMENT (""))
PRIMARY KEY
FIELD MANDANTID
FIELD ID
FOREIGN KEY PS
TABLE PERSON
FIELD MANDANTID
FIELD PERSONID
My metadata looks like this:
<class name="PersonDO"
identity-type="application"
objectid-class="com.elaxy.vamp.dom.person.PersonDOId"
persistence-capable-superclass="com.elaxy.vamp.dom.AbstractDO">
<extension vendor-name="kodo"
key="jdbc-class-ind"
value="metadata-value">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-ind/column"
value="TYP">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-ind-value"
value="-1">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-map"
value="base">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-map/table"
value="PERSON">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map/column"
value="ID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map/column"
value="MANDANTID">
</extension>
<field name="kundenNr"
persistence-modifier="persistent">
</field>
<field name="adressen"
persistence-modifier="persistent">
<collection
element-type="com.elaxy.vamp.dom.person.AdresseDO">
</collection>
<extension vendor-name="kodo"
key="jdbc-field-map"
value="one-many">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-map/ref-column.MANDANTID"
value="MANDANTID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-map/ref-column.ID"
value="PERSONID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-map/table"
value="ADRESSE">
</extension>
</field>
.. fields ..
</class>
<class name="AdresseDO"
identity-type="application"
objectid-class="com.elaxy.vamp.dom.person.AdresseDOId"
persistence-capable-superclass="com.elaxy.vamp.dom.AbstractDO">
<extension vendor-name="kodo"
key="jdbc-class-map"
value="base">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-map/table"
value="ADRESSE">
</extension>
<extension vendor-name="kodo"
key="jdbc-sequence-name"
value="ADRESSE_SEQ">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map/column"
value="ID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map/column"
value="MANDANTID">
</extension>
.. fields ..
</class>
Many thanks,
JanMarc
This is a part of the output from the "schemagen" tool:
<schemas>
<schema name="VAMP">
<table name="ADRESSE">
<pk name="ADRESSE_PRIMARY">
<on column="ID"/>
<on column="MANDANTID"/>
</pk>
<column name="ADRESSART" type="decimal" type-name="NUMBER"
size="5"/>
<column name="EMAIL" type="varchar" type-name="VARCHAR2"
size="30"/>
<column name="FAXNR" type="varchar" type-name="VARCHAR2"
size="25"/>
<column name="ID" type="decimal" type-name="NUMBER"
not-null="true" size="10"/>
<column name="LAND" type="decimal" type-name="NUMBER"
size="10"/>
<column name="MANDANTID" type="decimal" type-name="NUMBER"
not-null="true" size="5"/>
<column name="MELDEADRESSE" type="decimal" type-name="NUMBER"
size="1"/>
<column name="MOBILNR" type="varchar" type-name="VARCHAR2"
size="25"/>
<column name="ORT" type="varchar" type-name="VARCHAR2"
size="30"/>
<column name="PERSONID" type="decimal" type-name="NUMBER"
not-null="true" size="10"/>
<column name="PLZ" type="varchar" type-name="VARCHAR2"
size="5"/>
<column name="POSTADRESSE" type="decimal" type-name="NUMBER"
size="1"/>
<column name="POSTFACH" type="varchar" type-name="VARCHAR2"
size="10"/>
<column name="STRASSE" type="varchar" type-name="VARCHAR2"
size="30"/>
<column name="TELEFONNR" type="varchar" type-name="VARCHAR2"
size="25"/>
<fk name="ADRESSE_PS" delete-action="cascade"
to-table="VAMP.PERSON">
<join column="MANDANTID" to-column="MANDANTID"/>
<join column="PERSONID" to-column="ID"/>
</fk>
<index name="ADRESSE_ORT">
<on column="MANDANTID"/>
<on column="ORT"/>
</index>
<index name="ADRESSE_PLZ">
<on column="MANDANTID"/>
<on column="PLZ"/>
</index>
<index name="ADRESSE_PS">
<on column="MANDANTID"/>
<on column="PERSONID"/>
</index>
<index name="ADRESSE_STR">
<on column="MANDANTID"/>
<on column="STRASSE"/>
</index>
</table>
The foreign key "ADRESSE_PS" was identified correctly.
I've taken a look at the class OracleDictionary and it seems that the
object "ForeignKey" considers only one column from the foreign keys -
but I use foreign keys that include two columns ("MANDANTID", "PERSONID").
Is that right or are foreign keys with two columns allowed by the
OracleDictionary?
Marc Prud'hommeaux wrote:
Jan-
That is odd ... Kodo should be identifying the foreign keys and ordering
the statements accordingly. The mappings appear correct to me at first
glance. If you run the "schemagen" tool, does Kodo correctly identify
the foreign key constraints in the database? Can you post the output
from the command so we can take a look?
Jan-Esdert Franken wrote:
Hi,
i have problems with non-deferred foreing key constraints:
I have a table "PERSON" and a table "ADRESSE" which has a foreign key
to "PERSON". Both tables have primary keys with two columns.
In the mappings I use application identity. The mappings are generated by
xdoclet.
We cannot use deferred constraint because we have to support following
databases: Oracle, Firebird, MS SQL, DB2.
I tested the mappings with Oracle and Firebird and got this exception
(with SQL Trace):
5602 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (1 errors)>
[15 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 1, (String) [email protected], (String)
04941 183742, (int) 12761, (int) 1, (int) 1, (String) 0171 2846751,
(String) Oldenburg, (int) 12760, (String) 26129, (int) 1, (null) null,
(String) Ammerl__nder Heerstra__e 19, (String) 04941 183740] [reused=0]
5602 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (2 errors)>
[0 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 3, (null) null, (null) null, (int) 12764,
(int) 1, (int) 0, (null) null, (String) Sylt, (int) 12759, (String) 25980,
(int) 0, (null) null, (String) Stephanstra__e 47, (String) 04651 19283]
[reused=1]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (2 errors)>
[0 ms] executing prepstmnt 13390902 INSERT INTO VAMP.PERSON (ANREDEID, ID,
KUNDENNR, LOESCHBEMERKUNG, MANDANTID, NAME1, NAME2, PERSONENDATUM,
PERSONENORT, TYP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [params=(null)
null, (int) 12759, (String) 9999452800, (null) null, (int) 1, (String)
Horstmann, (String) Manfred, (Timestamp) 1959-03-10 00:00:00.381, (String)
Flensburg, (int) 1] [reused=0]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (2 errors)>
[0 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 1, (String) [email protected], (String)
04941 183742, (int) 12763, (int) 1, (int) 1, (String) 0171 2846751,
(String) Oldenburg, (int) 12759, (String) 26129, (int) 1, (null) null,
(String) Ammerl__nder Heerstra__e 19, (String) 04941 183740] [reused=2]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART,
EMAIL, FAXNR, ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ,
POSTADRESSE, POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?) [params=(int) 3, (null) null, (null) null, (int) 12762,
(int) 1, (int) 0, (null) null, (String) Sylt, (int) 12760, (String) 25980,
(int) 0, (null) null, (String) Stephanstra__e 47, (String) 04651 19283]
[reused=3]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 13390902 INSERT INTO VAMP.PERSON (ANREDEID, ID,
KUNDENNR, LOESCHBEMERKUNG, MANDANTID, NAME1, NAME2, PERSONENDATUM,
PERSONENORT, TYP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [params=(null)
null, (int) 12760, (String) 9999452801, (null) null, (int) 1, (String)
Horstmann, (String) Christine, (Timestamp) 1972-03-10 00:00:00.381,
(String) Erfurt, (int) 1] [reused=1]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 11320634 INSERT INTO VAMP.NATPERSON
(ANZAHLKINDER, ARBEITGEBERID, BEITRAGSSATZ, BERUFID, BRANCHEID,
FAMILIENSTAND, FAMSTANDSEIT, FINANZAMTID, GEBIETSFREMDERAWG, GUETERSTAND,
IDBEHOERDE, IDNR, KIRCHENSTEUER, KVID, MANDANTID, PERSONID, PRIVATKV,
STAAT, STEUERBERATERID, STEUERKLASSE, STEUERNR, STEUERTARIF, TITEL) VALUES
[params=(int) 0, (null) null, (double) 0.0, (null) null, (int) 12410,
(int) 2, (Timestamp) 1991-12-12 00:00:00.381, (null) null, (int) 0, (int)
3, (null) null, (null) null, (int) 0, (int) 12576, (int) 1, (int) 12760,
(int) 0, (null) null, (null) null, (int) 0, (null) null, (int) 1, (null)
null] [reused=0]
5618 TRACE [main] kodo.jdbc.SQL - <t 26577913, conn 33108879 (3 errors)>
[0 ms] executing prepstmnt 11320634 INSERT INTO VAMP.NATPERSON
(ANZAHLKINDER, ARBEITGEBERID, BEITRAGSSATZ, BERUFID, BRANCHEID,
FAMILIENSTAND, FAMSTANDSEIT, FINANZAMTID, GEBIETSFREMDERAWG, GUETERSTAND,
IDBEHOERDE, IDNR, KIRCHENSTEUER, KVID, MANDANTID, PERSONID, PRIVATKV,
STAAT, STEUERBERATERID, STEUERKLASSE, STEUERNR, STEUERTARIF, TITEL) VALUES
[params=(int) 0, (null) null, (double) 0.0, (int) 12362, (int) 12378,
(int) 2, (Timestamp) 1991-12-12 00:00:00.381, (null) null, (int) 0, (int)
3, (null) null, (null) null, (int) 0, (int) 12576, (int) 1, (int) 12759,
(int) 0, (null) null, (null) null, (int) 0, (null) null, (int) 1, (null)
null] [reused=1]
5634 TRACE [main] kodo.jdbc.JDBC - <t 26577913, conn 33108879 (3
errors)> [16 ms] rollback
5634 TRACE [main] kodo.jdbc.JDBC - <t 26577913, conn 33108879 (3
errors)> return
5634 TRACE [main] kodo.jdbc.JDBC - <t 26577913, conn 33108879 (3
errors)> [0 ms] close
com.solarmetric.jdbc.ReportingSQLException: ORA-02291: integrity
constraint (VAMP.ADRESSE_PS) violated - parent key not found
{prepstmnt 22511833 INSERT INTO VAMP.ADRESSE (ADRESSART, EMAIL, FAXNR,
ID, MANDANTID, MELDEADRESSE, MOBILNR, ORT, PERSONID, PLZ, POSTADRESSE,
POSTFACH, STRASSE, TELEFONNR) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?) [params=(int) 1, (String) [email protected], (String) 04941
183742, (int) 12761, (int) 1, (int) 1, (String) 0171 2846751, (String)
Oldenburg, (int) 12760, (String) 26129, (int) 1, (null) null, (String)
Ammerl__nder Heerstra__e 19, (String) 04941 183740] [reused=0]} [code=2291,
state=23000]
at
com.solarmetric.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:124)
at
com.solarmetric.jdbc.LoggingConnectionDecorator.access$600(LoggingConnectionDecorator.java:19)
at
com.solarmetric.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:728)
at
com.solarmetric.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:362)
How can I force it to insert in the table "NATPERSON" first and then in
the table "ADRESSE"?
I use following JDBC-drivers:
Firebird: 1.5.5
Oracle: 9.2.0.1.0
My property file:
<!-- standard properties for all dbms -->
<prop key="kodo.LicenseKey">LICENSE KEY REMOVED</prop>
<prop key="kodo.ConnectionFactoryProperties">MaxCachedStatements=150,
MaxActive=50, MaxIdle=50</prop>
<prop key="kodo.FetchBatchSize">200</prop>
<prop key="kodo.DataCache">true(CacheSize=5000)</prop>
<prop key="kodo.RemoteCommitProvider">sjvm</prop>
<prop key="kodo.jdbc.MappingFactory">metadata</prop>
<prop key="kodo.jdbc.ForeignKeyConstraints">true</prop>
<prop key="kodo.jdbc.SchemaFactory">native</prop>
<prop
key="javax.jdo.PersistenceManagerFactoryClass">kodo.jdbc.runtime.JDBCPersistenceManagerFactory</prop>
<prop key="javax.jdo.option.Optimistic">true</prop>
<!-- oracle connection properties -->
<prop key="kodo.jdbc.DBDictionary">oracle</prop>
<prop
key="javax.jdo.option.ConnectionDriverName">oracle.jdbc.driver.OracleDriver</prop>
<prop key="javax.jdo.option.ConnectionURL">..</prop>
<prop key="javax.jdo.option.ConnectionUserName">..</prop>
<prop key="javax.jdo.option.ConnectionPassword">..</prop>
<prop key="kodo.jdbc.SequenceFactory">native</prop>
<prop key="kodo.jdbc.Schemas">..</prop>
<!-- firebird connection properties
<prop key="kodo.jdbc.DBDictionary">kodo.jdbc.sql.FirebirdDictionary</prop>
<prop
key="javax.jdo.option.ConnectionDriverName">org.firebirdsql.jdbc.FBDriver</prop>
<prop key="javax.jdo.option.ConnectionURL">..</prop>
<prop key="javax.jdo.option.ConnectionUserName">..</prop>
<prop key="javax.jdo.option.ConnectionPassword">..</prop>
<prop key="kodo.jdbc.SequenceFactory">native(TableName=SYSDUAL,
Format="SELECT GEN_ID(,1) FROM ")</prop>
-->
My database schema looks like this:
TABLE PERSON
FIELD MANDANTID (SMALLINT REQUIRED COMMENT (""))
FIELD ID (AUTOINC COMMENT (""))
FIELD TYP (SMALLINT REQUIRED COMMENT (""))
FIELD KUNDENNR (CHAR(15) COMMENT ("Kundennummer"))
PRIMARY KEY
FIELD MANDANTID
FIELD ID
FOREIGN KEY MD
TABLE MANDANT
FIELD MANDANTID
INDEX KDNR
FIELD MANDANTID
FIELD KUNDENNR
UNIQUE
TABLE ADRESSE
FIELD MANDANTID (SMALLINT REQUIRED COMMENT (""))
FIELD ID (AUTOINC COMMENT (""))
FIELD PERSONID (LONGINT REQUIRED COMMENT (""))
PRIMARY KEY
FIELD MANDANTID
FIELD ID
FOREIGN KEY PS
TABLE PERSON
FIELD MANDANTID
FIELD PERSONID
My metadata looks like this:
<class name="PersonDO"
identity-type="application"
objectid-class="com.elaxy.vamp.dom.person.PersonDOId"
persistence-capable-superclass="com.elaxy.vamp.dom.AbstractDO">
<extension vendor-name="kodo"
key="jdbc-class-ind"
value="metadata-value">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-ind/column"
value="TYP">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-ind-value"
value="-1">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-map"
value="base">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-map/table"
value="PERSON">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map/column"
value="ID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map/column"
value="MANDANTID">
</extension>
<field name="kundenNr"
persistence-modifier="persistent">
</field>
<field name="adressen"
persistence-modifier="persistent">
<collection
element-type="com.elaxy.vamp.dom.person.AdresseDO">
</collection>
<extension vendor-name="kodo"
key="jdbc-field-map"
value="one-many">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-map/ref-column.MANDANTID"
value="MANDANTID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-map/ref-column.ID"
value="PERSONID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-map/table"
value="ADRESSE">
</extension>
</field>
.. fields ..
</class>
<class name="AdresseDO"
identity-type="application"
objectid-class="com.elaxy.vamp.dom.person.AdresseDOId"
persistence-capable-superclass="com.elaxy.vamp.dom.AbstractDO">
<extension vendor-name="kodo"
key="jdbc-class-map"
value="base">
</extension>
<extension vendor-name="kodo"
key="jdbc-class-map/table"
value="ADRESSE">
</extension>
<extension vendor-name="kodo"
key="jdbc-sequence-name"
value="ADRESSE_SEQ">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.id/jdbc-field-map/column"
value="ID">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId"
value="">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map"
value="value">
</extension>
<extension vendor-name="kodo"
key="jdbc-field-mappings/AbstractDO.mandantId/jdbc-field-map/column"
value="MANDANTID">
</extension>
.. fields ..
</class>
Many thanks,
Jan
Marc Prud'hommeaux
SolarMetric Inc. -
Create a materized view without primary key constraint on the base table?
Hi
I tried to create a materized view but I got this error:
SQL> CREATE MATERIALIZED VIEW TABLE1_MV REFRESH FAST
START WITH
to_date('04-25-2009 03:00:13','MM-dd-yyyy hh24:mi:ss')
NEXT
sysdate + 1
AS
select * from TABLE1@remote_db
SQL> /
CREATE MATERIALIZED VIEW TABLE1_MV REFRESH FAST
ERROR at line 1:
ORA-12014: table 'TABLE1' does not contain a primary key constraint.
TABLE1 in remote_db doesn't have a primary key constraint. Is there anyway that I can create a materized view on a base table which doesn't have a primary key constraint?
Thanks
LizHi,
Thanks for your helpful info. I created a materialized view in the source db with rowid:
SQL> CREATE MATERIALIZED VIEW log on TABLE1 with rowid;
Materialized view log created.
Then I created a MV on the target DB:
CREATE MATERIALIZED VIEW my_schema.TABLE1_MV
REFRESH FAST
with rowid
START WITH
to_date('04-25-2009 03:00:13','MM-dd-yyyy hh24:mi:ss')
NEXT
sysdate + 1
AS
select * from TABLE1@remote_db
SQL> /
CREATE MATERIALIZED VIEW my_schema.TABLE1_MV
ERROR at line 1:
ORA-12018: following error encountered during code generation for
"my_schema"."TABLE1_MV"
ORA-00942: table or view does not exist
TABLE1 exists in remote_db:
SQL> select count(*) from TABLE1@remote_db;
COUNT(*)
9034459
Any clue what is wrong?
Thanks
Liz -
Materialized View - does not contain a primary key constraint
I am trying to create materialized view. I gone through the MV wizard creation. Added 2 columns (foo_column, foo_pk) of the table and have a simple select statement (Select foo_column from foo_dim). Also created a primary key contrainst and refencing the primary key (FOO_PK) of the dimension.
I am getting the following error:
ORA-12014: table 'FOO_DIM' does not contain a primary key constraintIt was solved. The table that I am querying has to have a primary key defined before creating a materialized view.
-
Ora-2270 Error while adding foreign key constraint on top a view
While adding a constraint, referencing a foreign key column from a view raises error. However, it works fine over a table.
Here's the sample script:
create table t_temp (
sample_id number,
text varchar2(40))
alter table t_temp add constraint temp_pk
primary key (sample_id);
create view tempvw as select sample_id,text from t_temp;
create table t_sample (
uniq_id number,
sample_id number,
sample_text varchar(40));
=========
ALTER TABLE t_sample ADD CONSTRAINT FK_sample_temp
FOREIGN KEY (sample_id) REFERENCES t_temp (sample_id);
This works fine.
=========
==============
The following raises ERROR....
ALTER TABLE t_sample ADD CONSTRAINT FK_sample_temp1
FOREIGN KEY (sample_id) REFERENCES tempvw (sample_id);
Error starting at line 1 in command:
ALTER TABLE t_sample ADD CONSTRAINT FK_sample_temp1
FOREIGN KEY (sample_id) REFERENCES tempvw (sample_id)
Error report:
SQL Error: ORA-02270: no matching unique or primary key for this column-list
02270. 00000 - "no matching unique or primary key for this column-list"
*Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement
gives a column-list for which there is no matching unique or primary
key constraint in the referenced table.
*Action: Find the correct column names using the ALL_CONS_COLUMNS
catalog viewWhat exactly are you trying to accomplish by having a
referential integrity constraint on a view (which is
not allowed). PKs and FKs are allowed on views. DISABLE NOVALIDATE is the only allowed state for them. View constraints are used for query rewriting: http://download.oracle.com/docs/cd/B19306_01/server.102/b14223/qradv.htm#sthref1457
Regards,
Dima -
Is this a BUG??? Database Export not including Foreign Key Constraints
I'm using SQL Developer 1.5.4 with both the 59.47 and 59.59 patches installed. I want to do a database export from a 10g XE schema, and include all objects in the resulting DDL. So, I select ALL the checkboxes in the export wizard and when I get to Step 3 to specify objects, I don't see any of my constraints in the listbox... no foreign key constraints, no primary key constraints, no check constraints, nothing. Is this a bug, or is there a workaround, or what could I possibly be doing wrong? We want to be able to use the database export feature to easily transport and track modifications to our entire schema using source control compare.
Any help or alternate suggestions would be apprieciated.
Thanks,
MattThanks skutz, we just figured that out this morning. Also, it should be noted that you need to be logged in as the owner of the schema otherwise selecting nothing in the filter will give you nothing, but selecting items in the filter will give you those items even if you're not connected as the schema owner. I wonder if that is the detail of the Bug 8679318.
Edited by: mattsnyder on Jul 14, 2009 9:24 AM -
Dear community,
I have a flat data set which I run through a lookup and return. I want to check if at least one of the records matching a unique key constraint had a successful return without merging all the records. Can some one point me in the right direction?
Thanks!
MarcHi,
Sounds like a job for the Lookup Check processor!
As with all check processors, it adds a flag attribute (with a Y/N value) that denotes if the lookup was successful or not, as well as filtering records based on this at output.
Lookup Check does the same as Lookup and Return but does not return the record(s) looked up.
Also note that Lookup and Return does not actually merge records, but it does pull back the return data (which you can then split if you want a record for each).
Regards,
Mike -
Publish: dropping index when it is used for foreign key constraint enforcement
Hi,
I'm trying to update a target schema from a reference database via Publish. Among the changes to apply, there's an index that needs to be dropped. Since it's linked to a foreign key constraint, it cannot be deleted unless the foreign key is temporarily dropped
(I saw somewhere that disabling the foreign key should be enough but it doesn't seem to work either).
Since there are other changes to be made on the same table, this foreign key also has to be dropped before the script can delete the table and re-create it. This part of the script is correctly generated. The problem is that this part appears after the 'DROP
INDEX' instruction.
So when generating the update script, SSDT tries to drop the index BEFORE dropping the foreign key. And I can't drop the foreign key in my custom pre-deployment script, otherwise the update script would fail when trying to delete it again.
Shouldn't SSDT be smart enough to drop the constraint before the index? Is it a bug or did I forget to set an option? If it's not a bug, what can I do apart from doing it manually?
Thank you for your helpHi Elsa,
That sounds like a bug. Could you please file a Connect issue for this at
https://connect.microsoft.com/SQLServer/feedback/CreateFeedback.aspx using the category "Developer Tools (SSDT, BIDS, etc.)"? We're trying to track all bugs through
Connect so that you can tell when we have fixed the issue and we can request more information.
A workaround for this issue might be to write a pre-deployment script for your project to drop the foreign key prior to deployment. A pre-deployment script can be added to your project by right-clicking on the
project in solution explorer and then clicking on Add > Script... and selecting Pre-Deployment Script from the list.
Thanks! -
Query the name of the parent table in a foreign key constraint
Hello,
Does anyone know how to query for the parent table name in a foreign key constraint? I don't see that relationship in ALL_CONS_COLUMNS or ALL_CONSTRAINTS.
Thanks in advance,
Michaelor try this...
SELECT rc.TABLE_NAME "PK_Table_Name",cc.TABLE_NAME "FK_Table_Name",
case when cc.column_name = rc.column_name
then c.TABLE_NAME || '(' || cc.COLUMN_NAME || ')'
else r.TABLE_NAME || '(' || rc.COLUMN_NAME || ') = ' ||c.TABLE_NAME || '(' || cc.COLUMN_NAME || ')' end as "TABLE_NAME(COLUMN_NAME)"
from all_constraints c,
all_constraints r,
all_cons_columns cc,
all_cons_columns rc
WHERE
r.table_name = upper('emp')
and c.CONSTRAINT_TYPE = 'R'
and c.R_OWNER = r.OWNER
and c.R_CONSTRAINT_NAME = r.CONSTRAINT_NAME
and c.CONSTRAINT_NAME = cc.CONSTRAINT_NAME
and c.OWNER = cc.OWNER
and r.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
and r.OWNER = rc.OWNER
and cc.POSITION = rc.POSITION
ORDER BY r.TABLE_NAME; -
Primary key constraint firing when there's no need
Hi All,
I've got a very weird problem.
I've written a PL/SQL procedure to insert addresses into a tabel. The adresses are assigned an unique number by means of a sequence. This unique number is the primary key of the table and has to be unique.
The following thing occurs: The primary key constraint fires whenever i try to insert a record and i can't figure out why.
I use the following code
PROCEDURE mk_adr(klant NUMBER, receiver NUMBER) IS
oidtje NUMBER DEFAULT 0;
BEGIN
BEGIN
SELECT lea_adr_seq.NEXTVAL INTO oidtje
FROM dual
INSERT INTO lea_adr (
oid, object, streetname,
housenumber, housealpha, ponumber,
postcode, cityname, locationdesc,
province, kind, country_id,
relation_id, offerrec_id,
h_trans_van,
h_geldig_van,
h_gebruiker
SELECT oidtje, oidtje, streetname,
housenumber, housealpha, ponumber,
postcode, cityname, locationdesc,
province, kind, country_id,
null, receiver,
To_Date('01-01-2000'),
To_Date('01-01-2000'),
'conv'
FROM lea_adr
WHERE relation_id = klant
EXCEPTION
WHEN Others THEN
conv_algemeen.debugMessage('mk_adr :: '||SQLERRM);
END;
END;
as you can see the very first thing i'm doing is selecting a new unique number into oidtje from the sequence which provides the numbers. Then i use it to insert the record. The insert fails with the primary key constraint firing saying that oid is not filled with an unique number.
When i do "select max(oid) from lea_adr;" I get a number lower than the number the i get when doing "select lea_adr_seq.nextval from dual;"
So am i overseeing something or is something very obvious going wrong ?
PatrickWrite your procedure like the following and it will work.
PROCEDURE mk_adr(klant NUMBER, receiver NUMBER) IS
BEGIN
INSERT INTO lea_adr (
oid, object, streetname,
housenumber, housealpha, ponumber,
postcode, cityname, locationdesc,
province, kind, country_id,
relation_id, offerrec_id,
h_trans_van,
h_geldig_van,
h_gebruiker
SELECT lea_adr_seq.NEXTVAL, lea_adr_seq.NEXTVAL, streetname,
housenumber, housealpha, ponumber,
postcode, cityname, locationdesc,
province, kind, country_id,
null, receiver,
To_Date('01-01-2000'),
To_Date('01-01-2000'),
'conv'
FROM lea_adr
WHERE relation_id = klant
EXCEPTION
WHEN Others THEN
conv_algemeen.debugMessage('mk_adr :: '||SQLERRM);
END;
Using the lea_adr_seq.NEXTVAL more then once in the SAME select will return the same value for both calls.
SQL> create sequence test
2 ;
Sequence created.
SQL> select test.nextval,test.nextval from dual;
NEXTVAL NEXTVAL
1 1
SQL> -
Add a foriegn key constraint to to a sub type on an object table
Hi,
I'm trying to set up a new table of an object type in our DB at work and on it I want to create a foreign key constraint on one of the attributes of one of the sub types
The table is called documents and is a table of document_ot
Definition:
create or replace
TYPE document_ot AS OBJECT (
-- ATTRIBUTES
created_date DATE,
created_by VARCHAR2( 32 ),
doc_id NUMBER,
-- CONSTRUCTORS
) NOT INSTANTIABLE NOT FINAL;
This type is extended by the type funding_certificates_ot
create or replace
TYPE funding_certificate_ot UNDER document_ot (
-- ATTRIBUTES
fc_prefix VARCHAR2( 2 ),
fc_sequence NUMBER,
fc_suffix VARCHAR2( 1 ),
fc_pr_id NUMBER,
-- CONSTRUCTORS
-- METHODS
) NOT FINAL;
I want to add a constraint to the to documents table that says that the funding_certificate_ot column fc_pr_id references pr_id in the table payruns.
I've managed to create an index on the fc_pr_id column using:
CREATE INDEX fc_pr_idx
ON documents d (treat (value(d) as funding_certificate_ot).fc_pr_id);
The code I thought I'd use for the foreign key constraint would be:
ALTER TABLE documents d
ADD CONSTRAINT doc_pr_fk FOREIGN KEY
treat (value(d) as funding_certificate_ot).fc_pr_id
REFERENCES payruns
(pr_id)
ENABLE;
But that doesn't work - would someone be able to give me the correct syntax please?
Many thanksHi,
I'm trying to set up a new table of an object type in our DB at work and on it I want to create a foreign key constraint on one of the attributes of one of the sub types
The table is called documents and is a table of document_ot
Definition:
create or replace
TYPE document_ot AS OBJECT (
-- ATTRIBUTES
created_date DATE,
created_by VARCHAR2( 32 ),
doc_id NUMBER,
-- CONSTRUCTORS
) NOT INSTANTIABLE NOT FINAL;
This type is extended by the type funding_certificates_ot
create or replace
TYPE funding_certificate_ot UNDER document_ot (
-- ATTRIBUTES
fc_prefix VARCHAR2( 2 ),
fc_sequence NUMBER,
fc_suffix VARCHAR2( 1 ),
fc_pr_id NUMBER,
-- CONSTRUCTORS
-- METHODS
) NOT FINAL;
I want to add a constraint to the to documents table that says that the funding_certificate_ot column fc_pr_id references pr_id in the table payruns.
I've managed to create an index on the fc_pr_id column using:
CREATE INDEX fc_pr_idx
ON documents d (treat (value(d) as funding_certificate_ot).fc_pr_id);
The code I thought I'd use for the foreign key constraint would be:
ALTER TABLE documents d
ADD CONSTRAINT doc_pr_fk FOREIGN KEY
treat (value(d) as funding_certificate_ot).fc_pr_id
REFERENCES payruns
(pr_id)
ENABLE;
But that doesn't work - would someone be able to give me the correct syntax please?
Many thanks -
Unable to enforce Primary Key constraint with my code
Hi Guys
I have a table that contains 2 columns: code and description (defined as not null). I am using oracle forms 10g, if I inset a new row both the columns: code and description should have data e.g. code: 001 and description: Main Store...
So on forms I have an on-update trigger on block level that handles the error messages but if the user has to update the description this trigger blocks him because the value for the code i.e. 001 is already on the database but if I remove the piece of code (the first IF block on my code together with a cursor and the entire declaration section)then the primary key constraint is violated: the code is as follows:
declare
v_store_code store_types.code%type;
cursor store_codes is
select a.code
from store_types a
where a.code = :b1.code;
begin
open store_codes;
fetch store_codes into v_store_code;
if ( store_codes%found ) then
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
close store_codes;
raise form_trigger_failure;
end if;
close store_codes;
if :b1.code is not null and :b1.description is null then
message('If the Store Code has been captured, then the Store Description must be captured!');
message('If the Store Code has been captured, then the Store Description must be captured!');
raise form_trigger_failure;
end if;
if :b1.description is not null and :b1.code is null then
message('If the Store Description has been captured, then the Store code must be captured!');
message('If the Store Description has been captured, then the Store code must be captured!');
raise form_trigger_failure;
end if;
exception
when others then
message(sqlerrm);
raise form_trigger_failure;
end;
My main intention here is: the user should be able to update the description field and save the changes without violating primary key on the column: code ...... please help me guys...ICM
Sir as far I could understand , your problem is that your wanna allow the end users to update the Store_description , and Store_code..
So on forms I have an on-update trigger on block level that handles the error messages but if the user has to update the description this trigger blocks him because the value for the code i.e. 001 is already on the databaseif it's right then why don't you have unique key constraints Store_description?
alter the tables and apply unique key constraint...
and no need to write this code
f :b1.code is not null and :b1.description is null then
message('If the Store Code has been captured, then the Store Description must be captured!');
message('If the Store Code has been captured, then the Store Description must be captured!');
raise form_trigger_failure;
end if;because as you mentioned
code and description (defined as not null)if they are already under not null constraints then no need to handle this in coding..
he/she must be able to change the description and save the changes without affecting the code i.e.:Sir I think updation in records can only be performed when the forms is in query mode e.g execute query, have all/desired records and then make changes
(1)description is in unique key constraint it can't be duplicated ..
(2)code is PK it can never be duplicated...
for this I would suggest you to have a update button on forms , when-button-pressed trigger sets property of block (update_allowed, property_true);
and check the code of unique key violation code from oracle form's help , when that error code raise up you can show those message
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');I hope it could do something for you
thanks
regards:
usman noshahi -
Foreign key constraint on multi-column primary key accepts 1 empty column!?
Hi, we have a reference table with a two-column primary key. In the child table there is a non-mandatory foreign key constraint to this table. So if both child columns are null it's ok too. But now we see that if one of the two child table columns that build up the foreign key is null, the other column can have any (non-existant in the master-tabel) value you like!? That does not make sense.
Can anyone explain this to me???
Regards, Paul.Paul, I believe that this is in accordance to the ANSI SQL standard requirement for the treatment of nulls in a multi-column FK. In any case Oracle specifically states this is the way FK work From the 10 Concepts manual, Ch 21 Data Integrity, topic Nulls and Foreign Keys:
The relational model permits the value of foreign keys either to match the referenced primary or unique key value, or be null. If any column of a composite foreign key is null, then the non-null portions of the key do not have to match any corresponding portion of a parent key. <<HTH -- Mark D Powell -- -
IDOC to MSsql, error in mapping(Violation of PRIMARY KEY constraint)
Hi All,
I'm working with MATMAS IDOC to MSSql. My SQL structure is of 8 tables(multiple statements) with primary key. In mapping i have used UPDATE_INSERT in action field for all the tables but still im getting "Violation of PRIMARY KEY constraint" for the last table structure. first 7 tables are single occurances but the 8th structure data is coming multple times from IDOC(E1MARMM).
my 8th table structure is :
STATEMENT8 IDOC(MAPPED)
TABLE8
ACTION UPDATE_INSERT
TABLE TABLENAME
ACCESS 0 to Unbounded MAPPED with E1MARMM
Item_CD used oneasmany +splitbyvalue with MATNR
Plant_ID used oneasmany +splitbyvalue with WERKS
EAN_CAT used oneasmany +splitbyvalue with NUMTP
EAN used oneasmany +splitbyvalue with EAN11
Numerator_For_Conversion_To_BaseUOM
Display_UOM
Denominator_for_conversion_To_baseUOM
KEY 0 to Unbounded MAPPED with E1MARMM
Item_CD used oneasmany +splitbyvalue with MATNR
Plant_ID used oneasmany +splitbyvalue with WERKS
EAN_CAT used oneasmany +splitbyvalue with NUMTP
EAN used oneasmany +splitbyvalue with EAN11
Display_UOM
in test tab its fine and fetching number of times according to MARMM segments but in END to END testing its triggering an error stating that
""Message processing failed. Cause: com.sap.engine.interfaces.messaging.api.exception.MessagingException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'MM_EAN' (structure 'STATEMENT8'): com.microsoft.sqlserver.jdbc.SQLServerException: Violation of PRIMARY KEY constraint 'PK_MM_EAN'. Cannot insert duplicate key in object 'dbo.MM_EAN'. ""
Plz help me regarding this..Hi team,
How resolve the below error
Violation of PRIMARY KEY constraint 'PK_test'. Cannot insert duplicate key in object 'dbo.test'. The duplicate key value is (12610). (Source: MSSQLServer, Error number: 2627) ?
Thanks,
Ram
RAM
There can be two reasons
1. The insert script used is having multiple instances of the records with Key as 12610 returned from the source query. If this is the issue add a logic to include only the unique set of id values for records by avoiding duplicates. There are several approaches
for this like using ROW_NUMBER with PARTITION BY, using a join with derived table etc
2. The record with Key 12610 already exist in your destination table and your script is again trying to insert another instances of record with same key. This can be avoided by adding a NOT EXISTS condition with a subquery which will check and return only
those records which doesnt already exist in the source
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
Visakh
My Wiki User Page
My MSDN Page
My Personal Blog
My Facebook Page
Maybe you are looking for
-
When sharing my 60 minutes iMovie project with iDVD inmediately message 'The project could not be prepared for publishing because an error occurred (Error in user parameter list)' appears. Could not find the user parameter list, so I've no more info
-
My friend's iPad doesn't want to buy anything
Hello guys! I have a very tragic story about the my friend's iPad. She recently bought some apps on her iPad, but iTunes store withdrew no money from her account. Today Appstore asked to recheck the payment card. During the checking process, it asked
-
How do I get a larger font in the Tabs and Adress bar?
I have poor eyesight and when I open Firefox the Tabs Bar and the address bars is to small for me to read. I have to use a magnifying Glass to read them and than up close.
-
hi, i want to know how to de install oracle 8i and 9i from solaris 8 platform. can anyone plz assist me to know how to do ? with regards Boo
-
Hi All , I am trying to INSERT updated_by and Updated_date with ctut_id and sysdate When user trying to update any record. IF USER scott is logged into system and trying to update table Then I need to get his id number(CTUT_ID) into updated_by And sy