Finding foreign keys of a child table,grandchild and all dependendents
Hi All,
I just came up with this sceanrio
I have to delete a record in a parent table with a condition provided will have to find all the child tables depends on it and should recursively find all the dependents of the child table.
How to achieve this.Please help with a query or guide.Thanks in advance
Thanks visakh it gave me an idea and this script helped me
DECLARE @mytable VARCHAR(30) SET @mytable = 'test'
DECLARE @RecordID VARCHAR(8)
SET @RecordID = '00000001'
DECLARE @Order INT SET @Order = 0
DECLARE @Count INT
declare @tblname varchar(100),@query NVARCHAR(max)
if OBJECT_ID('tempdb..#OrderList','U') is not null
DROP TABLE #OrderList
CREATE TABLE #TEMP
OrderNo INT,
TableName VARCHAR(50)
CREATE TABLE #OrderList
RecordNo INT,
OrderNo INT,
TableName VARCHAR(50)
INSERT INTO #TEMP
VALUES ( @Order,
@mytable )
WHILE ( EXISTS(SELECT TableName
FROM #TEMP
WHERE OrderNo = @Order) )
BEGIN
SET @Order= @Order + 1;
INSERT INTO #TEMP
SELECT @Order,
t1.TABLE_NAME AS PointsFrom
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS r
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t1
ON t1.CONSTRAINT_NAME = r.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t2
ON t2.CONSTRAINT_NAME = r.UNIQUE_CONSTRAINT_NAME
WHERE t2.table_name IN (SELECT TableName
FROM #TEMP
WHERE OrderNo = ( @Order - 1 ))
END
INSERT INTO #OrderList
SELECT Row_number() OVER (ORDER BY OrderNo, TableName),
#TEMP.OrderNo,
#TEMP.TableName
FROM #TEMP
DROP TABLE #TEMP
--SELECT * FROM #OrderList
SET @Count = (SELECT Max(RecordNo)
FROM #OrderList)
WHILE (@Count <> 0 )
BEGIN
select @tblname = TableName FROM #OrderList WHERE RecordNo = @Count
select @query = 'DELETE from '+ @tblname
select @query
exec sp_executesql @query
SET @Count = @Count-1
END
Similar Messages
-
Foreign-key autocreation in child table giving issue in the application
Hi,
I am facing an issue with partitioning a table that foreign key relationship is created on the original table with interim table. This gives exception in the application because of its existence. Please suggest me how to get rid of this issue.
Let's say my table T_TABLENAME has to be partitioned. It has a child table T_CHILD_TABLENAME which references (FK_T1) ID column of T_TABLENAME.
While partitioning, COPY_TABLE_DEPENDENTS function copies/creates the key/index/trigger objects for the interim table. [I need copy_constraints => TRUE in COPY_TABLE_DEP call], Fine.
But, after partitioning is done, the foreign key (TMP$$_FK_T1) object exists with the child table which should absolutely not happen as this forms dependency with interim table as well along with parent table.
Here my script goes:
i) Creating interim table
CREATE TABLE T_TABLENAME_PT
PARTITION BY RANGE (CREATED_DATE)
(PARTITION P_2007 VALUES LESS THAN (TO_DATE('01-JAN-2008','dd-MON-yyyy')),
PARTITION P_2009 VALUES LESS THAN (TO_DATE('01-JAN-2010','dd-MON-yyyy')),
PARTITION P_2011 VALUES LESS THAN (TO_DATE('01-JAN-2012','dd-MON-yyyy')),
PARTITION P_2012 VALUES LESS THAN (TO_DATE('01-JAN-2013','dd-MON-yyyy')),
PARTITION P_RECENT VALUES LESS THAN (MAXVALUE))
AS SELECT * FROM T_TABLENAME WHERE 1=2;
ii) Partitioning Script
declare
v_username varchar2(50);
v_exception varchar2(220);
l_num_errors PLS_INTEGER;
v_source_table varchar2(35) := 'T_TABLENAME';
v_interim_table varchar2(35) := 'T_TABLENAME_PT';
BEGIN
select USERNAME into v_username from USER_USERS where rownum <= 1;
begin
DBMS_REDEFINITION.CAN_REDEF_TABLE(v_username, v_source_table, DBMS_REDEFINITION.CONS_USE_PK);
DBMS_REDEFINITION.START_REDEF_TABLE(
uname => v_username,
orig_table => v_source_table,
int_table => v_interim_table);
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
uname => v_username,
orig_table => v_source_table,
int_table => v_interim_table,
copy_indexes => 1,
copy_triggers => TRUE,
copy_constraints => TRUE,
copy_privileges => TRUE,
ignore_errors => TRUE,
num_errors => l_num_errors);
DBMS_REDEFINITION.SYNC_INTERIM_TABLE(v_username, v_source_table, v_interim_table);
begin
DBMS_REDEFINITION.FINISH_REDEF_TABLE(
UNAME => v_username,
ORIG_TABLE => v_source_table,
INT_TABLE => v_interim_table);
EXCEPTION
WHEN OTHERS THEN
DBMS_REDEFINITION.ABORT_REDEF_TABLE(
UNAME => v_username,
ORIG_TABLE => v_source_table,
INT_TABLE => v_interim_table);
end;
exception
when others then
v_exception :=substr(SQLERRM,1,150);
end;
exception
when others then
v_exception := substr(SQLERRM,1,175);
END;Thanks for your information. I am using Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit.
1) I am logging the exceptions in a logger table.
2) If CAN_REDEF_TABLE gives exception, flow goes to the final EXCEPTION block and program terminates. So if no exceptions, the other steps comes into the flow of execution.
Complete Details
(1) Parent Table (existing): T_SOH_SUBREQ_INSTALLATION_ADDR
create table T_SOH_SUBREQ_INSTALLATION_ADDR
ACCOUNT_ADDRESS_ID NUMBER(10),
SUBREQ_ADDRESS_ID NUMBER(10) not null,
COMMUNITY_ID NUMBER(10),
STREET_ID NUMBER(10),
BUILDING_ID NUMBER(10),
CREATED_USER_ID VARCHAR2(40) not null,
MODIFIED_USER_ID VARCHAR2(40) not null,
CREATED_DATE TIMESTAMP(6) not null,
MODIFIED_DATE TIMESTAMP(6) not null,
DELETION_STATUS CHAR(1) not null
alter table T_SOH_SUBREQ_INSTALLATION_ADDR
add constraint PK_T_SOH_SUBREQ_INST_ADDR primary key (SUBREQ_ADDRESS_ID);
alter table T_SOH_SUBREQ_INSTALLATION_ADDR
add constraint FK_T_SOH_SUBREQ_INSTALLATIO624 foreign key (ACCOUNT_ADDRESS_ID)
references T_SOH_ACCT_INSTALLATION_ADDR (ACCOUNT_ADDRESS_ID);
(2) Child Table (existing): T_SOH_SUBREQ_LINKED_INST_ADDR
create table T_SOH_SUBREQ_LINKED_INST_ADDR
CREATED_DATE TIMESTAMP(6) not null,
CREATED_USER_ID VARCHAR2(40) not null,
MODIFIED_DATE TIMESTAMP(6) not null,
MODIFIED_USER_ID VARCHAR2(20) not null,
DELETION_STATUS CHAR(1) not null,
SUBREQ_ADDRESS_ID NUMBER(10) not null,
SUBREQUEST_ID NUMBER(10) not null,
CIRCUIT_POINT NUMBER(10)
alter table T_SOH_SUBREQ_LINKED_INST_ADDR
add constraint PK_T_SOH_SUBREQ_LINK_INST_ADDR primary key (SUBREQ_ADDRESS_ID, SUBREQUEST_ID);
alter table T_SOH_SUBREQ_LINKED_INST_ADDR
add constraint FK_T_SOH_SUBREQ_LINKED_INST626 foreign key (SUBREQ_ADDRESS_ID)
references T_SOH_SUBREQ_INSTALLATION_ADDR (SUBREQ_ADDRESS_ID);
(3) Partitioning is done on Parent Table
CREATE TABLE T_TMP_PARTITION_LOGS
LOG_MSG VARCHAR2(250),
LOG_TIME TIMESTAMP(6)
CREATE TABLE T_SOH_SUBREQ_INSTALL_ADDR_PT
PARTITION BY RANGE (CREATED_DATE)
(PARTITION P_2007 VALUES LESS THAN (TO_DATE('01-JAN-2008','dd-MON-yyyy')),
PARTITION P_2009 VALUES LESS THAN (TO_DATE('01-JAN-2010','dd-MON-yyyy')),
PARTITION P_2011 VALUES LESS THAN (TO_DATE('01-JAN-2012','dd-MON-yyyy')),
PARTITION P_2012 VALUES LESS THAN (TO_DATE('01-JAN-2013','dd-MON-yyyy')),
PARTITION P_RECENT VALUES LESS THAN (MAXVALUE))
AS SELECT * FROM T_SOH_SUBREQ_INSTALLATION_ADDR WHERE 1=2;
insert into t_tmp_partition_logs(log_msg,log_time) values('01_CreateTable: T_SOH_SUBREQ_INSTALL_ADDR_PT Table Created', systimestamp);
(4) Script for REDEFINITION
declare
v_username varchar2(50);
v_exception varchar2(220);
l_num_errors PLS_INTEGER;
v_source_table varchar2(35) := 'T_SOH_SUBREQ_INSTALLATION_ADDR';
v_interim_table varchar2(35) := 'T_SOH_SUBREQ_INSTALL_ADDR_PT';
v_file_name varchar2(20) := '02_Redefine';
BEGIN
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name || '.sql --> Starts', systimestamp);
select USERNAME into v_username from USER_USERS where rownum <= 1;
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name || ': UserName-'|| v_username, systimestamp);
begin
DBMS_REDEFINITION.CAN_REDEF_TABLE(v_username, v_source_table, DBMS_REDEFINITION.CONS_USE_PK);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||': '|| v_source_table ||' After CAN_REDEF_TABLE', systimestamp);
DBMS_REDEFINITION.START_REDEF_TABLE(
uname => v_username,
orig_table => v_source_table,
int_table => v_interim_table);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||': '|| v_source_table ||' After START_REDEF_TABLE', systimestamp);
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
uname => v_username,
orig_table => v_source_table,
int_table => v_interim_table,
copy_indexes => 1,
copy_triggers => TRUE,
copy_constraints => TRUE,
copy_privileges => TRUE,
ignore_errors => TRUE,
num_errors => l_num_errors);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||': '|| v_source_table ||' After COPY_TABLE_DEPENDENTS - l_num_errors:' || l_num_errors, systimestamp);
DBMS_REDEFINITION.SYNC_INTERIM_TABLE(v_username, v_source_table, v_interim_table);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||': After SYNC_INTERIM_TABLE on '|| v_source_table, systimestamp);
begin
DBMS_REDEFINITION.FINISH_REDEF_TABLE(
UNAME => v_username,
ORIG_TABLE => v_source_table,
INT_TABLE => v_interim_table);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||': After FINISH_REDEF_TABLE on '|| v_source_table, systimestamp);
EXCEPTION
WHEN OTHERS THEN
DBMS_REDEFINITION.ABORT_REDEF_TABLE(
UNAME => v_username,
ORIG_TABLE => v_source_table,
INT_TABLE => v_interim_table);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||': Aborted '|| v_source_table, systimestamp);
end;
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||': '|| v_source_table ||' redefined', systimestamp);
exception
when others then
v_exception :=substr(SQLERRM,1,150);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||'-EXCEPTION:'|| v_source_table ||'-' || v_exception, systimestamp);
end;
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||'.sql <-- Ends', systimestamp);
exception
when others then
v_exception := substr(SQLERRM,1,175);
insert into t_tmp_partition_logs(log_msg,log_time) values(v_file_name ||'-EXCEPTION:' || v_exception, systimestamp);
END;
==> NOW THE ISSUE
My child table T_SOH_SUBREQ_LINKED_INST_ADDR is having another foreign key column TMP$$_FK_T_SOH_SUBREQ_LIN4 with the interim table T_SOH_SUBREQ_INSTALL_ADDR_PT. -
Find the key for join between table "crhd" and "equi" for use field "answt"
I make program for read data from table "crhd" for print about machine report
but I can not find the key for link join to table "equi" for print field "answt" (acquistion value)
please help me find the key field for join between table "crhd" and "equi" for use field "answt"
thank you very much...This is how the Work Center is linked to a particular Equipment -
Functional - In IE03 ( view Equipments) You see the Work Center of a particular Equipment.
Technical - Go to view V_EQUI ( view of EQUI and EQUZ). Pass the Equipment number alongwith V_EQUI-PM_OBJTY = 'A' ( i,.e searching for the Object Type Work Center). In this way u ll get the V_EQUI-GEWRK - this is the Work Center ID.
You can pass this Work Center ID to CRHD. And you will get the Work Center text.
CRHD-OBJTY = 'A'
CRHD-OBJID = V_EQUI-GEWRK.
and u ll get the CRHD-ARBPL - this is the Work Center.
So u need to come backwards, alongwith ur CRHD-OBJTY and CRHD-OBJID , you pass the same to V_EQUI and u get the list of equipment numbers alongwith ur ANSWT(Acquisition value).
I guess it solves ur problem. -
How to find the level of each child table in a relational model?
Earthlings,
I need your help and I know that, 'yes, we can change'. Change this thread to a answered question.
So: How to find the level of each child table in a relational model?
I have a relacional database (9.2), all right?!
O /* This is a child who makes N references to each of the follow N parent tables (here: three), and so on. */
/↑\ Fks
O"O O" <-- level 2 for first table (circle)
/↑\ Fks
"o"o"o" <-- level 1 for middle table (circle)
↑ Fk
"º"Tips:
- each circle represents a table;
- red tables no have foreign key
- the table in first line of tree, for example, has level 3, but when 3 becomes N? How much is N? This's the question.
I started thinking about the following:
First I have to know how to take the children:
select distinct child.table_name child
from all_cons_columns father
join all_cons_columns child
using (owner, position)
join (select child.owner,
child.constraint_name fk,
child.table_name child,
child.r_constraint_name pk,
father.table_name father
from all_constraints father, all_constraints child
where child.r_owner = father.owner
and child.r_constraint_name = father.constraint_name
and father.constraint_type in ('P', 'U')
and child.constraint_type = 'R'
and child.owner = 'OWNER') aux
using (owner)
where child.constraint_name = aux.fk
and child.table_name = aux.child
and father.constraint_name = aux.pk
and father.table_name = aux.father;Thinking...
Let's Share!
My thanks in advance,
Philips
Edited by: BluShadow on 01-Apr-2011 15:08
formatted the code and the hierarchy for readbilityJustin,
Understood.
Nocycle not work in 9.2 and, even that would work, would not be appropriate.
With your help, I decided a much simpler way (but there is still a small problem, <font color=red>IN RED</font>):
-- 1
declare
type udt_roles is table of varchar2(30) index by pls_integer;
cRoles udt_roles;
begin
execute immediate 'create user philips
identified by philips';
select granted_role bulk collect
into cRoles
from user_role_privs
where username = user;
for i in cRoles.first .. cRoles.count loop
execute immediate 'grant ' || cRoles(i) || ' to philips';
end loop;
end;
-- 2
create table philips.root1(root1_id number,
constraint root1_id_pk primary key(root1_id)
enable);
grant all on philips.root1 to philips;
create or replace trigger philips.tgr_root1
before delete or insert or update on philips.root1
begin
null;
end;
create table philips.root2(root2_id number,
constraint root2_id_pk primary key(root2_id)
enable);
grant all on philips.root2 to philips;
create or replace trigger philips.tgr_root2
before delete or insert or update on philips.root2
begin
null;
end;
create table philips.node1(node1_id number,
root1_id number,
node2_id number,
node4_id number,
constraint node1_id_pk primary key(node1_id)
enable,
constraint n1_r1_id_fk foreign key(root1_id)
references philips.root1(root1_id) enable,
constraint n1_n2_id_fk foreign key(node2_id)
references philips.node2(node2_id) enable,
constraint n1_n4_id_fk foreign key(node4_id)
references philips.node4(node4_id) enable);
grant all on philips.node1 to philips;
create or replace trigger philips.tgr_node1
before delete or insert or update on philips.node1
begin
null;
end;
create table philips.node2(node2_id number,
root1_id number,
node3_id number,
constraint node2_id_pk primary key(node2_id)
enable,
constraint n2_r1_id_fk foreign key(root1_id)
references philips.root1(root1_id) enable,
constraint n2_n3_id_fk foreign key(node3_id)
references philips.node3(node3_id) enable);
grant all on philips.node2 to philips;
create or replace trigger philips.tgr_node2
before delete or insert or update on philips.node2
begin
null;
end;
create table philips.node3(node3_id number,
root2_id number,
constraint node3_id_pk primary key(node3_id)
enable,
constraint n3_r2_id_fk foreign key(root2_id)
references philips.root2(root2_id) enable);
grant all on philips.node3 to philips;
create or replace trigger philips.tgr_node3
before delete or insert or update on philips.node3
begin
null;
end;
create table philips.node4(node4_id number,
node2_id number,
constraint node4_id_pk primary key(node4_id)
enable,
constraint n4_n2_id_fk foreign key(node2_id)
references philips.node2(node2_id) enable);
grant all on philips.node4 to philips;
create or replace trigger philips.tgr_node4
before delete or insert or update on philips.node4
begin
null;
end;
-- out of the relational model
create table philips.node5(node5_id number,
constraint node5_id_pk primary key(node5_id)
enable);
grant all on philips.node5 to philips;
create or replace trigger philips.tgr_node5
before delete or insert or update on philips.node5
begin
null;
end;
-- 3
create table philips.dictionary(table_name varchar2(30));
insert into philips.dictionary values ('ROOT1');
insert into philips.dictionary values ('ROOT2');
insert into philips.dictionary values ('NODE1');
insert into philips.dictionary values ('NODE2');
insert into philips.dictionary values ('NODE3');
insert into philips.dictionary values ('NODE4');
insert into philips.dictionary values ('NODE5');
--4
create or replace package body philips.pck_restore_philips as
procedure sp_select_tables is
aExportTablesPhilips utl_file.file_type := null; -- file to write DDL of tables
aExportReferencesPhilips utl_file.file_type := null; -- file to write DDL of references
aExportIndexesPhilips utl_file.file_type := null; -- file to write DDL of indexes
aExportGrantsPhilips utl_file.file_type := null; -- file to write DDL of grants
aExportTriggersPhilips utl_file.file_type := null; -- file to write DDL of triggers
sDirectory varchar2(100) := '/app/oracle/admin/tace/utlfile'; -- directory \\bmduhom01or02
cTables udt_tables; -- collection to store table names for the relational depth
begin
-- omits all referential constraints:
dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'REF_CONSTRAINTS', false);
-- omits segment attributes (physical attributes, storage attributes, tablespace, logging):
dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SEGMENT_ATTRIBUTES', false);
-- append a SQL terminator (; or /) to each DDL statement:
dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true);
-- create/open files for export DDL:
aExportTablesPhilips := utl_file.fopen(sDirectory, 'DDLTablesPhilips.pdc', 'w', 32767);
aExportReferencesPhilips := utl_file.fopen(sDirectory, 'DDLReferencesPhilips.pdc', 'w', 32767);
aExportIndexesPhilips := utl_file.fopen(sDirectory, 'DDLIndexesPhilips.pdc', 'w', 32767);
aExportGrantsPhilips := utl_file.fopen(sDirectory, 'DDLGrantsPhilips.pdc', 'w', 32767);
aExportTriggersPhilips := utl_file.fopen(sDirectory, 'DDLTriggersPhilips.pdc', 'w', 32767);
select d.table_name bulk collect
into cTables -- collection with the names of tables in the schema philips
from all_tables t, philips.dictionary d
where owner = 'PHILIPS'
and t.table_name = d.table_name;
-- execution
sp_seeks_ddl(aExportTablesPhilips,
aExportReferencesPhilips,
aExportIndexesPhilips,
aExportGrantsPhilips,
aExportTriggersPhilips,
cTables);
-- closes all files
utl_file.fclose_all;
end sp_select_tables;
procedure sp_seeks_ddl(aExportTablesPhilips in utl_file.file_type,
aExportReferencesPhilips in utl_file.file_type,
aExportIndexesPhilips in utl_file.file_type,
aExportGrantsPhilips in utl_file.file_type,
aExportTriggersPhilips in utl_file.file_type,
cTables in out nocopy udt_tables) is
cDDL clob := null; -- colletion to save DDL
plIndex pls_integer := null;
sTableName varchar(30) := null;
begin
for i in cTables.first .. cTables.count loop
plIndex := i;
sTableName := cTables(plIndex);
* Retrieves the DDL and the dependent DDL into cDDL clob *
* for the selected table in the collection, and writes to file.*
begin
cDDL := dbms_metadata.get_ddl('TABLE', sTableName, 'PHILIPS');
sp_writes_ddl(aExportTablesPHILIPS, cDDL);
exception
when dbms_metadata.object_not_found then
null;
end;
begin
cDDL := dbms_metadata.get_dependent_ddl('REF_CONSTRAINT', sTableName, 'PHILIPS');
sp_writes_ddl(aExportReferencesPhilips, cDDL);
exception
when dbms_metadata.object_not_found2 then
null;
end;
begin
cDDL := dbms_metadata.get_dependent_ddl('INDEX', sTableName, 'PHILIPS');
sp_writes_ddl(aExportIndexesPhilips, cDDL);
exception
when dbms_metadata.object_not_found2 then
null;
end;
begin
cDDL := dbms_metadata.get_dependent_ddl('OBJECT_GRANT', sTableName, 'PHILIPS');
sp_writes_ddl(aExportGrantsPhilips, cDDL);
exception
when dbms_metadata.object_not_found2 then
null;
end;
begin
cDDL := dbms_metadata.get_dependent_ddl('TRIGGER', sTableName, 'PHILIPS');
sp_writes_ddl(aExportTriggersPhilips, cDDL);
exception
when dbms_metadata.object_not_found2 then
null;
end;
end loop;
end sp_seeks_ddl;
procedure sp_writes_ddl(aExport in utl_file.file_type,
cDDL in out nocopy clob) is
pLengthDDL pls_integer := length(cDDL);
plQuotient pls_integer := null;
plRemainder pls_integer := null;
begin
* Register variables to control the amount of lines needed *
* for each DDL and the remaining characters to the last row. *
select trunc(pLengthDDL / 32766), mod(pLengthDDL, 32766)
into plQuotient, plRemainder
from dual;
* Join DDL in the export file. *
* ps. 32766 characters + 1 character for each line break. *
-- if the size of the DDL is greater than or equal to limit the line ...
if plQuotient >= 1 then
-- loops for substring (lines of 32766 characters + 1 break character):
for i in 1 .. plQuotient loop
utl_file.put_line(aExport, substr(cDDL, 1, 32766));
-- removes the last line, of clob, recorded in the buffer:
cDDL := substr(cDDL, 32767, length(cDDL) - 32766);
end loop;
end if;
* If any remains or the number of characters is less than the threshold (quotient = 0), *
* no need to substring. *
if plRemainder > 0 then
utl_file.put_line(aExport, cDDL);
end if;
-- record DDL buffered in the export file:
utl_file.fflush(aExport);
end sp_writes_ddl;
begin
-- executes main procedure:
sp_select_tables;
end pck_restore_philips;<font color="red">The problem is that I still have ...
When creating the primary key index is created and this is repeated in the file indexes.
How to avoid?</font> -
Adding a foreign key to an access table
I have set up two tables in access and I am using SQL insert
with the form to populate the database. When I “submit”
the form I receive the following error:
Element CUST_ID is undefined in CUSTOMER_INFO.
The error occurred in
C:\Inetpub\wwwroot\spl_web_site\public_records\order_insert.cfm:
line 23
21 : <cfquery datasource="#odbc_datasource#"
name="desc">
22 : insert into rec_results (customer_info.cust_id,rec_desc)
23 : values('#customer_info.cust_id#',
24 : '#rec_desc#')
25 : </cfquery>
How do I get cust_id into the second table to be used as the
foreigh key when it “has not been created (defined)” in
the first table?If your cust_id is an autonumber primary key field in your
first table, then you will have to create that record first, then
retrieve the primary key value to be used as your foreign key in
your second table, especially if you have foreign key constraints
on the table. This is normal relational database behavior, since it
isn't really possible to have a child if there is no parent. In
this case, you will need some sort or SELECT between your two
inserts in order to determine the newly created cust_id. Or, you
may need some other means of gerating your unique PK value for
cust_id outside of Access. If you do the SELECT method, you would
do something like SELECT MAX(cust_id) FROM customer_info (assuming
that cust_id is generated sequentially), and you should enclose all
three database transactions within CFTRANSACTION tags so that you
don't accidentally grab the wrong cust_id from another simultaneous
transaction.
Phil -
Create foreign keys to delete child records
I am unfamiliar with foreign keys, I have 3 tables one is the parent table if a record is deleted in the parent table I would like the record to be deleted from the child record but I think that I am also confused about which should be the parent table
(purpose is to use in a form)
parent table (i think)
AdminEntry table
entryid ,
date1,
date1desc,
date2,
date2desc,
date3,
date3desc
In a form each date and its description is placed in the following table
CalendarEntry table
calendarid,
date,
datedesc
entryid (fk)?
so CalendarEntry will have many entries at least 3 from one entryId, this I get but what if I want to delete lets say date2 and date2desc record. If I delete it from AdminEntry table how will calendarEntry table know which one to delete?
Please help very confused.
(the other table also inserts to the CalendarEntry table)There is a demo of this functionality in Morgan's Library at www.psoug.org under Foreign Keys.
Look for ON DELETE CASCADE. -
How to find foreign key in pl/sql
Error starting at line 1 in command:
DELETE FROM ZKET_SOLE WHERE IID_SOLA = 1
Error report:
SQL Error: ORA-02292: integrity constraint (IRCKIS.ZKETSTIP_ZKET_FK) violated - child record found
02292. 00000 - "integrity constraint (%s.%s) violated - child record found"
*Cause: attempted to delete a parent key value that had a foreign
dependency.
*Action: delete dependencies first then parent or disable constraint.
i need to find foreign key but i do not know how. I know that it must be in dictionary but i can not find it. I do not have access to ER model.
ThxYou could use a query similar to this:
SELECT ucc.constraint_name,ucc.table_name,ucc.column_name
FROM user_cons_columns ucc
JOIN user_constraints uc on uc.constraint_name=ucc.constraint_name
WHERE CONSTRAINT_TYPE='R'You could also use the ALL_CONSTRAINTS / ALL_CONS_COLUMNS views.
Hope this helps! -
Foreign Keys for a Logical Table
Hi All,
I want to know in which scenarios we create the Foreign Keys for a Logical Table. Once we create the foreign key for the logical table, does it mean that it will automatically override if any joins are there.
Physical Table A, B ( no physical joins)
Logical Table A, B (logical join B(Dim)-->A(Fact))
created the foreign key in logical table A with B .(A.1=B.1)
Will the rpd generate sql with A.1=B.1 join condition for reports.
I tried to create the logical foreign key for logical table A, I could not see any corresponding table option.Here is its snapshot
http://tinypic.com/r/jq1gkz/6
Thanks,
ViratIn general when we go complex joins in Physical layer we go for Logical foreign key joins in BMM layer, best examples is SCD Type-II.
Physical Table A, B ( no physical joins)
-->You need to have a physical join so that this can be override by BMM layer
created the foreign key in logical table A with B .(A.1=B.1) Will the rpd generate sql with A.1=B.1 join condition for reports.
-->Yes you can see this join in BI Physical query.
I tried to create the logical foreign key for logical table A, I could not see any corresponding table option.Here is its snapshot
-->2 cases: 1)You need to delete existing logical joins 2) You might not have join in physical layer.
Hope this helps
Let me know for issues
Edited by: Srini VEERAVALLI on Jan 18, 2013 1:29 PM
BTW: You got very good name, why dont you update in your profile to see your name instead of some number
Edited by: Srini VEERAVALLI on Jan 18, 2013 1:29 PM -
Hi,
i want to have the details like reference tablename,reference volumn name of foreign key for a particular table.
SELECT a.column_name,
c_pk.table_name r_table_name, c_pk.constraint_name r_pk
FROM all_cons_columns a
JOIN all_constraints c ON a.owner = c.owner
AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
WHERE c.constraint_type = 'R'
AND a.table_name = :TableNameUsing this query I am getting everything except the reference column name.
Can somebody please help?
ThanxYou need to add another join to ALL_CONS_COLUMNS:
SELECT a.column_name,
c_pk.table_name r_table_name, c_pk.constraint_name r_pk,
c_pk_c.column_name
FROM all_cons_columns a
JOIN all_constraints c ON a.owner = c.owner
AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
JOIN all_cons_columns c_pk_c ON c_pk_c.owner = c_pk.owner
AND c_pk_c.constraint_name = c_pk.constraint_name
WHERE c.constraint_type = 'R'
AND a.table_name = :TableName -
Updation of Primary Key field in HR Tables (PA2001 and PA2002) - Urgent
Can anyone please tell me how to update a primary key field in HR Tables (PA2001 and PA2002).
I need to update sprps field in both the tables. I used HR_Infotype_Operation function module, but still it is not updating the field.
Pls find the following code snippet for the table PA2001 and let me know if any discrepancies :
TABLES: pa2001.
DATA: it_pa2001 TYPE TABLE OF pa2001,
wa_pa2001 LIKE LINE OF it_pa2001,
DATA: date TYPE d.
date = sy-datum - 100.
SELECT pernr sprps begda endda FROM PA2001 INTO CORRESPONDING FIELDS OF TABLE it_pa2001
WHERE begda BETWEEN date and sy-datum.
WRITE:/.
WRITE:/ 'PA 2001 Records'.
if sy-subrc <> 0.
WRITE:/ 'No Data Exists'.
else.
LOOP AT it_pa2001 INTO wa_pa2001.
WRITE:/ wa_pa2001-pernr, wa_pa2001-sprps, wa_pa2001-begda, wa_pa2001-endda.
ENDLOOP.
endif.
LOOP AT it_pa2001 INTO wa_pa2001.
wa_pa2001-sprps = 'X'.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '2001'
number = wa_pa2001-pernr
SUBTYPE =
OBJECTID =
LOCKINDICATOR =
VALIDITYEND =
VALIDITYBEGIN =
RECORDNUMBER =
record = wa_pa2001
operation = 'MOD'
TCLAS = 'A'
DIALOG_MODE = '0'
NOCOMMIT =
VIEW_IDENTIFIER =
SECONDARY_RECORD =
IMPORTING
RETURN =
KEY =
ENDLOOP.
if sy-subrc = 0.
write:/ 'SY-subrc is zero'.
write:/ ' Rows modified = ', sy-dbcnt.
else.
write:/ 'No Record(s) updated'.
endif.
commit work.
WRITE: / 'Updated Records in the Internal Table IT_PA2001'.
SELECT pernr sprps begda endda FROM PA2001 INTO CORRESPONDING FIELDS OF TABLE it_pa2001
WHERE begda BETWEEN date AND sy-datum..
LOOP AT it_pa2001 INTO wa_pa2001.
WRITE:/ wa_pa2001-pernr, wa_pa2001-sprps, wa_pa2001-begda, wa_pa2001-endda.
ENDLOOP.Thanks Kiran.
But I need to change this field as we need to lock the records, as soon as the employee fills his/her time sheets which will be sent for HR Payroll, later on.
When I am updating directly the field the database table PA2001, its not updating but for table PA2002, only few records are being updated.
Is there any other alternative for this problem?
Pls reply.
Thanks,
Harish -
How to make a copy of an application with its schema-tables,data and all
Good day,
I am looking for the best way to make a copy of an application from one computer to another, including the schema (tables, data and all) in Apex3.2.
I can only manage to make a copy of the application without the data using the export utility
Please assist with this difficulty
Kind Regards
Thabo
Edited by: Thabo K on Jun 1, 2009 1:13 AMHello,
To copy across the data you can use the traditional EXP/IMP or the Datapump utility.
If you're used to using EXP/IMP I'd encourage you to look at Datapump, if you haven't used EXP/IMP before I'd encourage you to look at Datapump (datapump rocks) -
http://www.oracle-base.com/articles/10g/OracleDataPump10g.php
There are a few major differences between Datapump and traditional EXP/IMP (EXP/IMP creates the export file on the client side, Datapump creates it on the server side etc).
In my book "Pro Oracle Application Express" I have a section on cloning applications/data between instances, which you might find useful.
Hope this helps,
John.
Blog: http://jes.blogs.shellprompt.net
Work: http://www.apex-evangelists.com
Author of Pro Application Express: http://tinyurl.com/3gu7cd
REWARDS: Please remember to mark helpful or correct posts on the forum, not just for my answers but for everyone! -
hii, on my iphone 4s, i tried upgrading my OS and i was asked if i needed back up and i said yes, after upgrading i couldnt find any of my files, document, pictures, music and all. please i need help please.
Hi,
usually when you upgrade, it should not delete your files, but if it happens, than you should have a backup.
Unfortunately it is very common, that people don't know, what exactly is in the backup.
The question is, what files exactly you are missing? Own pictures, or taken with the device? Purchased music form the iTunes Store, or own? ....
Documents and files are mostly up to the developer of the app, if they are part of the backup, usually not and you need to transfer them before.
In the backup you will find just pictures from the Camera Rolle folder, everything else you should have on the PC, if you had it on the device.
Same then for music, you can transfer purchased music from the device, but your own works just one direction, from PC to device, from device to PC it doesn't work.
In future I recomand you to be sure how the backup works or use a 3rd party app (iExplorer) where you have a little bit more "freedome" than with iTunes.
Or you maybe just restored from the worng backup -
Can't find airport to turn it on, lost wifi and all addresses after a software upgrade
i can't find airport to turn it on, lost wifi and all ip addresses after a software upgrade on my iMac
1. Does the WiFi icon in preferences have a yellow triangle with an exclamation point?
2. Do you have physical access to the Airport router?
3. WiFi through local cable company - does that mean you have a Cable company device which also has WiFi built-in AND also have an Airport router?
4. Under About This Mac -> More Info -> System Report -> Network, do you see any wifi adapters? Usually a grey wifi icon in the menu bar implies that it has been turned off. If you Turn Wifi On in System Preferences -> Network -> WiFi, does the menu bar icon show you any change in the wifi icon? -
Find foreign key which are able or not
Same as the topic ~ how can I find all the able/unable foreign key/contraints inside a database ? Using TSQL
Hello,
Please try the scripts provided on the following resources:
http://blog.sqlauthority.com/2009/07/17/sql-server-two-methods-to-retrieve-list-of-primary-keys-and-foreign-keys-of-database/
http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/
http://blog.sqlauthority.com/2007/09/16/sql-server-2005-list-all-the-constraint-of-database-find-primary-key-and-foreign-key-constraint-in-database/
Hope this helps.
Regards,
Alberto Morillo
SQLCoffee.com -
Multiple foreign keys to a single table
Hi,
I need to write an SQL sentence to bring a unique row formed from multiple foreign keys which are dependent on the same table. The two tables as follow:
CREATE TABLE UNIDADMEDIDA (
IDUNIDADMEDIDA NUMERIC(3) NOT NULL,
DESCRIPCION VARCHAR2(128) NOT NULL,
CONSTRAINT PKUM PRIMARY KEY(IDUNIDADMEDIDA)
CREATE TABLE TRANSPORTE (
IDBOLETA NUMERIC(12) NOT NULL,
CORRELAVEHICULO NUMERIC(2) NOT NULL,
TIPOVEHICULO NUMERIC(1),
TIPOGASOLINA NUMERIC(1),
CANTIDAD NUMERIC(8),
RECORRIDOPROMEDIO NUMERIC(10,2),
IDUMRECORRIDO NUMERIC(3),
CONSUMOPROMEDIO NUMERIC(10,2),
IDUMCONSUMOPROM NUMERIC(3),
CONSUMOTOTALANUAL NUMERIC(10,2),
IDUMCONSUMOTOT NUMERIC(3),
CONSTRAINT PKTRANSPORT PRIMARY KEY(IDBOLETA, CORRELAVEHICULO),
CONSTRAINT FKUMRECORRI FOREIGN KEY(IDUMRECORRIDO) REFERENCES UNIDADMEDIDA(IDUNIDADMEDIDA),
CONSTRAINT FKUMCONSUMO FOREIGN KEY(IDUMCONSUMOPROM) REFERENCES UNIDADMEDIDA(IDUNIDADMEDIDA),
CONSTRAINT FKUMCONSTOT FOREIGN KEY(IDUMCONSUMOTOT) REFERENCES UNIDADMEDIDA(IDUNIDADMEDIDA)
The columns IDUMRECORRIDO, IDUMCONSUMOPROM and IDUMCONSUMOTOT depend on the table UNIDADMEDIDA (specifically from the IDUNIDADMEDIDA field). I need to bring back the description (DESCRIPCION field) from the different values stored in TRANSPORTE table.
Thanks for your help!!!
MarioWelcome to the forum!
Have you thought about joining against the parent table three times to pick up each different description?
SELECT <COLUMN LIST>
, UNI_A.DESCRIPCION
, UNI_B.DESCRIPCION
, UNI_C.DESCRIPCION
FROM TRANSPORTE
JOIN UNIDADMEDIDA UNI_A ON UNI_A.IDUNIDADMEDIDA = TRANPORTE.IDUMRECORRIDO
JOIN UNIDADMEDIDA UNI_B ON UNI_B.IDUNIDADMEDIDA = TRANPORTE.IDUMCONSUMOPROM
JOIN UNIDADMEDIDA UNI_C ON UNI_C.IDUNIDADMEDIDA = TRANPORTE.IDUMCONSUMOTOT
;It is always helpful to provide the following:
1. Oracle version (SELECT * FROM V$VERSION)
2. Sample data in the form of CREATE / INSERT statements.
3. Expected output
4. Explanation of expected output (A.K.A. "business logic")
5. Use \ tags for #2 and #3. See FAQ (Link on top right side) for details.
You provided #2 partially. If you provide the rest we may be able to help you even further.
Maybe you are looking for
-
Hi everyone I am trying to invoke a servlet from a jsp file,running in Jrun3.1.My jsp files are working fine but when the jsp forwards control to servlet,It gives error:403 forbidden. I'm using <jsp:forward page="web-inf/servlets/Demoservlet"/> Can a
-
VL10B is terminating in background job, no deliveries are generated
VL10B is terminating when running in a background job then no deliveries get generated for STO, is there a way to make the program skip to the next record instead of terminating so some deliveries will be generate?
-
Update of project planning after change in activity type
Hello Experts, we are doing manual activity input planning ( CJ40 ) via customer report per year equal to project dates. This means if we change activity plan price ( KP26 ) in future years, we need to recalculate the planned values in project system
-
User mapping for r3 reference system in the portal does not work
Hi SDN, I have created a system entry in the portal. I set the system alias for this system. I am not able to save my login and password for this system. I have got the following error in usermanengement log file. Can anybody help me? The portal vers
-
The release notes for OL6.3 indicate that its possible to create a btrfs root filesystem on install using the alternative boot ISO media (excerpt from release notes at https://oss.oracle.com/ol6/docs/RELEASE-NOTES-U3-en.html): Note: The standard inst