Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How to find the table affected by a constraint ?

Christian PitetMar 2 2020 — edited Mar 2 2020

Hi

I have a script in PL/SQL to insert data into a table :

alter session set NLS_DATE_FORMAT = 'DD/MM/YY-HH:MI:SS' ;

set serveroutput on

DECLARE

cursor C1 is select date1, valeur, clef_var, id from EVV_STQR4@BDSIVOA.NTSIVOA, sensor

where clef_var = (select clef_var from c_variable@bdsivoa.NTSIVOA where ref_var= 'W093LONBT018' )

and date1 > (select lastacq from sensor where ID = (Select ID from sensor where CMT= 'W093LONBT018' ))

and CMT = 'W093LONBT018' ;

V_DATE1 DATE NULL ;

V_Nom_table varchar2(1000) ;

Stmt VARCHAR2(2000);

V_Nom_ID Varchar2(2000) ;

V_nom_seq Varchar2(2000) ;

V_VALEUR NUMBER (24,6);

V_CLEF_VAR NUMBER ;

n number ;

boucles number default 0 ;

MAX_RAW_DATE DATE NULL ;

V_VALID_DATE DATE default TO_DATE('01/01/01', 'DD/MM/YY') ;

BEGIN

For ligne in C1

Loop

exit when SQL%NOTFOUND ;

boucles := boucles + 1 ;

V_Nom_ID := TO_CHAR(ligne.ID) ;

V_DATE1 := ligne.DATE1 ;

V_VALEUR := ligne.VALEUR ;

V_nom_table := 'SAFEGE.MSR_'||V_Nom_ID;

V_CLEF_VAR := ligne.CLEF_VAR;

V_nom_seq := 'SQ_MSRID_'||V_Nom_ID||'.NEXTVAL';

stmt := 'begin SELECT '||V_nom_seq||' into :n FROM DUAL; end;';

DBMS_OUTPUT.PUT_LINE(V_nom_table) ;

EXECUTE IMMEDIATE Stmt using out n;

stmt := 'INSERT INTO '||V_nom_table||' VALUES (:1, :2, :3, :4, :5, :6, :7)';

DBMS_OUTPUT.PUT_LINE(stmt) ;

Execute immediate stmt USING n, V_DATE1, V_VALEUR, 0, V_VALID_DATE, 0, 0;

end loop ;

IF boucles != 0 THEN

stmt := 'SELECT MAX(RAW_DATE) FROM '||V_nom_table;

EXECUTE IMMEDIATE stmt INTO MAX_RAW_DATE ;

stmt := 'UPDATE SAFEGE.SENSOR SET LASTACQ=:1 WHERE ID=:2';

Execute immediate stmt USING MAX_RAW_DATE, V_NOM_ID ;

END IF;

END ;

/

EXIT

It gives the following output :

.....

INSERT INTO SAFEGE.MSR_3219 VALUES (:1, :2, :3, :4, :5, :6, :7)

SAFEGE.MSR_3219

INSERT INTO SAFEGE.MSR_3219 VALUES (:1, :2, :3, :4, :5, :6, :7)

SAFEGE.MSR_3219

INSERT INTO SAFEGE.MSR_3219 VALUES (:1, :2, :3, :4, :5, :6, :7)

DECLARE

*

ERREUR Ó la ligne 1 :

ORA-00001: unique constraint violation (SAFEGE.INDEX1)

ORA-06512: Ó ligne 34

I have been searching for the constraints of the table MSR_3219 and coul not find the constraint named INDEX1 :

SELECT owner, table_name, CONSTRAINT_NAME

  FROM ALL_CONSTRAINTS

WHERE TABLE_NAME = 'MSR_3219';

result :

SAFEGE MSR_3219 PK

SAFEGE MSR_3219 SYS_C0013396

SAFEGE MSR_3219 SYS_C0013397

SAFEGE MSR_3219 SYS_C0013398

SAFEGE MSR_3219 SYS_C0013399

There is no such constraint (INDEX1) on this table

I have been searching also for constraint named 'INDEX1' :

SELECT owner, table_name, CONSTRAINT_NAME

  FROM ALL_CONSTRAINTS

WHERE constraint_name like  '%INDEX1%';

And the result is null.

How could I find the object affected by the constraint 'SAFEGE.INDEX1' ?

I am using Oracle 12.1.

Best regards.

This post has been answered by BEDE on Mar 2 2020
Jump to Answer
Comments
Post Details
Added on Mar 2 2020
4 comments
382 views