Create same table (all constraints)
Hi all
I have a table and I want to duplicate this table. Including all constraints...
I used
create table new_table as
select * from old_table
I created this table, but there's no constraints...
Thanks...
Hi,
Then you need use DBMS_METADATA.GET_DDL as others said before.
SGMS@ORACLE10> set linesize 1000
SGMS@ORACLE10> set pagesize 1000
SGMS@ORACLE10> set long 9999999
SGMS@ORACLE10> SELECT DBMS_METADATA.GET_DDL('TABLE','MYTABLE','SGMS') FROM DUAL;
DBMS_METADATA.GET_DDL('TABLE','MYTABLE','SGMS')
CREATE TABLE "SGMS"."MYTABLE"
( "IEM_ENTIDADE" VARCHAR2(2) NOT NULL ENABLE,
"IEM_ANO" CHAR(4) NOT NULL ENABLE,
"IEM_FORMA_ENTRADA" NUMBER(1,0) NOT NULL ENABLE,
"IEM_DOC" NUMBER(6,0) NOT NULL ENABLE,
"IEM_LANC" NUMBER(3,0) NOT NULL ENABLE,
"IEM_ORDEM" NUMBER(3,0) NOT NULL ENABLE,
"IEM_DATA" DATE NOT NULL ENABLE,
"IEM_ALMOX" NUMBER(3,0) NOT NULL ENABLE,
"IEM_ORIGEM" CHAR(3) NOT NULL ENABLE,
"IEM_GRUPO" NUMBER(3,0) NOT NULL ENABLE,
"IEM_CLASSE" NUMBER(3,0) NOT NULL ENABLE,
"IEM_ITEM" NUMBER(4,0) NOT NULL ENABLE,
"IEM_UN_AQUISICAO" VARCHAR2(3) NOT NULL ENABLE,
"IEM_QUANT" NUMBER(15,4) NOT NULL ENABLE,
"IEM_VAL_UNITARIO" NUMBER(11,4) NOT NULL ENABLE,
"IEM_FATOR_CONV" NUMBER(6,0) NOT NULL ENABLE,
"IEM_OPERACAO" CHAR(1) NOT NULL ENABLE,
"IEM_QUANT_DIST" NUMBER(15,4) NOT NULL ENABLE,
"IEM_IPI_VALOR" NUMBER(11,2),
"IEM_IPI_PERCENT" NUMBER(11,2),
"IEM_LOTE" VARCHAR2(20),
"IEM_LOTE_DEST" NUMBER NOT NULL ENABLE,
"IEM_DESCONTO" NUMBER(15,2) DEFAULT 0,
"IEM_DATA_VENC" DATE,
"IEM_GARANTIA" DATE,
"IEM_ASSIST_TECNICA" VARCHAR2(2000),
CONSTRAINT "AETIEM_PK" PRIMARY KEY ("IEM_ENTIDADE", "IEM_ANO", "IEM_FORMA_ENTRADA", "IEM_DOC", "IEM_LANC")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 327680 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SIGMA" ENABLE,
CONSTRAINT "AETIEM_FK" FOREIGN KEY ("IEM_ENTIDADE", "IEM_GRUPO", "IEM_CLASSE", "IEM_ITEM")
REFERENCES "SGMS"."AET_PRO" ("PRO_ENTIDADE", "PRO_GRUPO", "PRO_CLASSE", "PRO_ITEM") ENABLE,
CONSTRAINT "AETIEM_FK1" FOREIGN KEY ("IEM_UN_AQUISICAO")
REFERENCES "SGMS"."AET_PRO_UN" ("UN_SIGLA") ENABLE,
CONSTRAINT "AETIEM_FK2" FOREIGN KEY ("IEM_ENTIDADE", "IEM_ANO", "IEM_FORMA_ENT
RADA", "IEM_DOC")
REFERENCES "SGMS"."AET_EM" ("EM_ENTIDADE", "EM_ANO", "EM_FORMA_ENTRADA", "EM_DOC") ON DELETE CASCADE ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 786432 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SIGMA"And after this you change the name of the table and perform a insert into select statement
But if you wanted get separeted DDL commands, you can use these options below too:
FK -> select dbms_metadata.get_dependent_ddl ('REF_CONSTRAINT','<table_name>') text from dual;
PK,CHK,UK -> select dbms_metadata.get_dependent_ddl ('CONSTRAINT','<table_name>') text from dual;
TRIGGER -> select dbms_metadata.get_dependent_ddl('TRIGGER','<table_name>') from dual;
INDEX -> select dbms_metadata.get_dependent_ddl('INDEX','<table_name>') from dual;
Example to get just the Foreign Keys:
SGMS@ORACLE10> select dbms_metadata.get_dependent_ddl ('REF_CONSTRAINT','MYTABLE') text from dual;
TEXT
ALTER TABLE "SGMS"."MYTABLE" ADD CONSTRAINT "AETIEM_FK" FOREIGN KEY ("IEM_ENTIDADE", "IEM_GRUPO", "IEM_CLASSE", "IEM_ITEM")
REFERENCES "SGMS"."AET_PRO" ("PRO_ENTIDADE", "PRO_GRUPO", "PRO_CLASSE", "PRO_ITEM") ENABLE
ALTER TABLE "SGMS"."MYTABLE" ADD CONSTRAINT "AETIEM_FK1" FOREIGN KEY ("IEM_UN_AQUISICAO") REFERENCES "SGMS"."AET_PRO_UN" ("UN_SIGLA") ENABLE
ALTER TABLE "SGMS"."MYTABLE" ADD CONSTRAINT "AETIEM_FK2" FOREIGN KEY ("IEM_ENTIDADE", "IEM_ANO", "IEM_FORMA_ENTRADA", "IEM_DOC")
REFERENCES "SGMS"."AET_EM" ("EM_ENTIDADE", "EM_ANO", "EM_FORMA_ENTRADA", "EM_DOC") ON DELETE CASCADE ENABLECheers
Similar Messages
-
SQL error msg - The DELETE statement conflicted with the SAME TABLE REFERENCE constraint
Executed as user: ****. The DELETE statement
conflicted with the SAME TABLE REFERENCE constraint "FK_PARENT_TASK_REF".
The conflict occurred in database "****", table "****", column
'PARENT_TASK_ID'. [SQLSTATE 23000] (Error 547) The statement has been
terminated. [SQLSTATE 01000] (Error 3621). The step failed.
Does this error msg indicate the whole script failed to execute or was it just a single step/task that failed ?
What does error msg mean ?
Anyway to prevent this error msg and ensure script runs successfullyHi mdavidh,
This error occurs because the record 'PARENT_TASK_ID' was referenced by 'FK_PARENT_TASK_REF'.
Please refer below codes:
CREATE TABLE MyTable (
ID INT, primary key(ID), -- primary key
ID_Parent INT foreign key(ID_Parent) references MyTable(ID), -- foreign key reference the same table
insert into MyTable(ID,ID_Parent)
values(0,0);
insert into MyTable(ID,ID_Parent)
values(1,0);
insert into MyTable(ID,ID_Parent)
values(2,0);
insert into MyTable(ID,ID_Parent)
values(3,1);
insert into MyTable(ID,ID_Parent)
values(4,3);
insert into MyTable(ID,ID_Parent)
values(5,4);
CREATE TRIGGER MyTrigger
on MyTable
instead of delete
as
set nocount on
update MyTable set ID_Parent = null where ID_Parent in (select ID from deleted)
delete from MyTable where ID in (select ID from deleted)
Now we could delete records.
delete from MyTable where ID_Parent=0
Thanks,
Candy Zhou -
Create table with constraint and index
If I create a table with constraint key; after that I create an unique index key, I got an error. Please see below.
Does it mean when I create a table with constraint the unique index are automatically created and I could not create
index key as I did as below?
create table test_const(ename varchar2(50) not null,
key_num number not null,
descr varchar2(100),
constraint constraint_test_const unique (ename, key_num));
create unique index test_const_idx on test_const
"ENAME","KEY_NUM"
tablespace tmp_data;
Error report:
SQL Error: ORA-01408: such column list already indexed
*01408. 00000 - "such column list already indexed"*Not too hard to check (the answer is yes by the way).
ME_XE?create table test_const(ename varchar2(50) not null,
key_num number not null,
descr varchar2(100),
constraint constraint_test_const unique (ename, key_num));
2 3 4
Table created.
Elapsed: 00:00:00.12
ME_XE?select index_name, index_type
from user_indexes where table_name = 'TEST_CONST';
2
INDEX_NAME INDEX_TYPE
CONSTRAINT_TEST_CONST NORMAL
1 row selected.
Elapsed: 00:00:00.14
ME_XE? -
Query performance on same table with many DML operations
Hi all,
I am having one table with 100 rows of data. After that, i inserted, deleted, modified data so many times.
The select statement after DML operations is taking so much of time compare with before DML operations (There is no much difference in data).
If i created same table again newly with same data and fire the same select statement, it is taking less time.
My question is, is there any command like compress or re-indexing or something like that to improve the performance without creating new table again.
Thanks in advance,
PalTry searching "rebuilding indexes" on http://asktom.oracle.com. You will get lots of hits and many lively discussions. Certainly Tom's opinion is that re-build are very rarley required.
As far as I know, Oracle has always re-used deleted rows in indexes as long as the new row belongs in that place in the index. The only situation I am aware of where deleted rows do not get re-used is where you have a monotonically increasing key (e.g one generated by a seqence), and most, but not all, of the older rows are deleted over time.
For example if you had a table like this where seq_no is populated by a sequence and indexed
seq_no NUMBER
processed_flag VARCHAR2(1)
trans_date DATEand then did deletes like:
DELETE FROM t
WHERE processed_flag = 'Y' and
trans_date <= ADD_MONTHS(sysdate, -24);that deleted the 99% of the rows in the time period that were processed, leaving only a few. Then, the index leaf blocks would be very sparsely populated (i.e. lots of deleted rows in them), but since the current seq_no values are much larger than those old ones remaining, the space could not be re-used. Any leaf block that had all of its rows deleted would be reused in another part of the index.
HTH
John -
Creating sequences for all tables in the database at a time
Hi ,
I need to create sequences for all the tables in my database.
i can create individually ,using toad and sqlplus.
Can any one give me a code for creating the sequences dynamically at a time for all the tables.
it is urgent ..
Regards.I need to create sequences for majority of the tables that are having ID column
which is sequences."The majority" is not the same as all. So you probably want to drive your generation script off the ALL_TAB_COLUMNS view...
where column_name = 'ID'You need to think about this carefully. You might want different CACHE sizes or different INCREMENT BY clauses for certain tables. You might even (whisper it) want a sequence to be shared by more than one table.
Code generation is a useful technique, but it is a rare application where one case fits all.
Cheers, APC
Blog : http://radiofreetooting.blogspot.com/ -
Creating View based on Current and previous data from same table
I am trying to create a view based on a table called “my_companies”. The table has following columns: “company_id”, “start_date”, “product_type_code”, “partner_id”
The main purpose of this view is to obtain previous company_id’s associated with a particular “partner_id“and “product_type_code”. So basically, I’m looking to create an extra column, say “prev_company_id” in the view along with all the other columns. The “previous” data can be obtained depending on the “start_date”. I’m not able to write a query successfully to do this.
Can anyone help? Thanks in advance.Hi,
Whenver you have a question, it helps to post:
(1) The version of Oracle (and any other relevant software) you're using
(2) A little sample data (just enough to show what the problem is) from all the relevant tables
(3) The results you want from that data
(4) Your best attempt so far
Executable SQL statements (like "CREATE TABLE AS ..." or "INSERT ..." statements) are best for (2).
Formatted tabular output is okay for (3). Type before and after the tabular text, to preserve spacing. The sample results should include any special cases that you foresee, such as one company having many previous companies, or vice-versa.
It sounds like might need a +self-join+, where you have two copies of the same table, as if the current companies were in one table and the previous companies were in another, even though they are all actually in the same table. -
Create a table from another table and add constraint statement. Please help
Previously, I post a question and it works as below:
create table my_table
PCTFREE 10 PCTUSED 0 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE
INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
TABLESPACE TAB_DATA
as select t1, t5, t2, t3, t4 from orig_table;
I have been trying to use the same strategy as I post earlier, but it doesn't work.
CONSTRAINT "MY_TEMP" UNIQUE ("ID", "SNAME", "CNAME", "TIME", "SYSTEM_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TAB_DATA" ENABLE
CLUSTER MY_CLUSTER
"CNAME"
Below iis my SQL statement, but it doesn't work. Please help.
create table my_table
CONSTRAINT "MY_TEMP" UNIQUE ("ID", "SNAME", "CNAME", "TIME", "SYSTEM_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TAB_DATA" ENABLE
CLUSTER MY_CLUSTER
"CNAME"
as (select t1, t5, t2, t3, t4 from orig_table;Hi,
Why do you need to combine the two action togather. You can get the things done in two steps.
Create table tab1 as select * from tab2;
Then you create any contraint that you want to create on tab2 using 'alter table add constraint'.
Regards -
Creating synonys for all table
i want to create synonyms for all atbles.the synonyn name and table name are same.instead creating one by one synonym i wnat to create all synonyms at a time.
1)select 'CREATE PUBLIC SYNONYM'||' '||'test'||' '||'for' ||' '||'test' from dual
2)select OBJECT_NAME from user_objects where OBJECT_TYPE ='TABLE'
in the first query if we replace with test with 2nd query then we can get the script for that.
i replaced that biut its not working how to do itHere is a generic grant script. If you review it, you will see how it works and can adapt it to your varying needs.
BEGIN
FOR x IN ( SELECT owner,
object_name,
DECODE(object_type, 'TABLE' , 'select, insert, update, delete',
'SEQUENCE', 'select',
'VIEW', 'select',
'execute') AS privs,
DECODE (owner, 'SCHEMA_1', 'USER_1',
'SCHEMA_2', 'ROLE_A'
) AS app_user
FROM dba_objects
WHERE object_type IN ('TABLE', 'PACKAGE', 'PROCEDURE',
'FUNCTION', 'SEQUENCE', 'VIEW')
AND owner IN ('SCHEMA_1', 'SCHEMA_2' ))
LOOP
BEGIN
EXECUTE IMMEDIATE 'grant ' || x.privs || ' on ' || x.owner ||
'.' || x.object_name || ' to ' || x.app_user ;
EXECUTE IMMEDIATE 'create or replace synonym '|| x.app_user||'.'||x.object_name||
' for ' ||x.owner||'.'||x.object_name ;
EXCEPTION
WHEN others THEN
dbms_output.put_line('Bad owner = '||x.owner||'; Bad app_user='||x.app_user||
'; Bad object_name='||x.object_name);
END;
END LOOP;
END;
/ -
Estimate time to enable all constraints and create all indexes
Hi,
To prepare a project to export/import for a whole database,
How can I estimate time required to enable all constraints and create all indexes
* Assume one full table scan per one FK constraint
* Assume one full table scan plus one sort/merge operation per one index
* Check it out whether we can use parallel DDL feature to speed up enabling of FK constraints
how can I use core schema (which will be exp/imp) in the production db to get needed metric for the calcualtion?
thanks
JerryThere is no definative way to find the time it takes to enable a constraint / create a Index
It toatally depends on the Size of the table / execution plan / resources available (In terms of CPU and Physical Memory ) /
Amount of Temporary tablespace -
How to drop all constraints on a table?
Oracle 11gR2
I tried this but no luck!
ALTER TABLE testDB.dbo.testTable1
DROP ALL CONSTRAINT
GOOracle 11gR2
I tried this but no luck!
ALTER TABLE testDB.dbo.testTable1
DROP ALL CONSTRAINT
GO
You never will have any 'luck' trying to execute SQL SERVER statements on an Oracle database.
There is no Oracle command to drop all constraints from a table.
1. create a new table using CTAS - CREATE newtable AS SELECT * FROM oldtable
2. drop the orginal table - DROP oldtable
3. rename the new table to the old name - RENAME newtable to oldtable
Constraints will be gone. -
Copy table including constraints.. Same DB..
Looking to find a way to copy a table, and to include all constraints over to the new table..
right now I use..
create table cust as select * from customers
How can I amend that statement to include constraints..
Thanks...To answer your question as far as I know it is not possible using CTAS but if you want to create a table only along with the constraints and other information
search for dbms_metadata package in the oracle reference manual.
Hope this helps.
Regards
Raj
Edited by: R.Subramanian on Oct 30, 2008 9:26 AM -
Creating a Master virtual hard disk and using the same for all other VM's
Hi,
We would like to create a master virtual hard disk and use the same for all other VM's. Can we do that ?
my requirements :
1) create 10 VM's
2) first create a master virtual hard disk with win OS and use the same to create the 10 VM's.
3) After creating the VM's change the HDD size.
-- if i have created master virtual disk with 500GB , and use the same for creating a virtual machine. can we change the HDD size to 1TB ?
After creating the VM's ,i will change the system names and activate the windows accordingly.
Will there be any implications ,if we can/will do like this.
Thanks.Hi Suren424,
I think Using Differencing Disks may cover your needs .
Please refer to following setps:
"Create the Parent Virtual Machine Configuration and Virtual Hard Disk
Install the Operating System, updates, and common software
Generalize the installation
Prepare the parent virtual hard disk
Create the differencing disks
Create virtual machines that use the differencing disks
For details please refer to follwing link:
http://social.technet.microsoft.com/wiki/contents/articles/1393.hyper-v-virtual-machine-vm-parent-child-configuration-using-differencing-disks.aspx
Hope this helps
Best Regards
Elton Ji
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. -
Historical and transaction data in the same tables creates perf problems
Our Oracle based application is slow partly due to the fact that historical data are kept in the same table as transactional data. For example records about deceased patients, patients treated 5 years ago...etc, are kept in the one and only one patient table, which is needed to run the daily process of the hospital. So gradually all our major tables PATIENTS, CHARTS, NAMES, APPOINTMENTS have grown very large and since most of our SQL join all these tables at the same time, then all screens and reports run very slowly. I have introduced the idea that we should split all these tables in two: historical PATIENTS data, and CURRENT PATIENTS data...the same with all the others. A nice system would first search in the smaller transactional tables, which would run faster being smaller, and if no data found, then fallback to the historical tables. But this would require programming. From what I have read mateialized view could solve part of our problem. We could have views containing for example only one year worth of the data, and I guess any changes could be later replicated in the base table. What I dont know is what to do if we cannot find the patient in the matealized views ? Do I need to fallback to another SQL which will search in the initial base tables ? Anyway we can implement this without programming ? Tx.
Appointment table: 207,470
Visit table: 5,890,920
Patient table: 2,993,129
Chart table: 2,864,069
Patient names table: 3,938,118
SELECT
APPOI_OR_VISIT,
VISIT_SEQ,
PAT_SEQ,
INST_CODE,
INST_CODE_DISPL,
INST_DESC,
CLINIC_CODE,
CLINIC_CODE_DISPL,
CLINIC_DESC,
SPEC_CODE,
SPEC_CODE_DISPL,
SPEC_DESC,
VISIT_DATE,
VISIT_TIME,
VISIT_TIME_ARRIVAL,
APPTYPE_CODE,
SESSION_DOM_MODE,
PRESTYPE_CODE,
PRESTYPE_DOM_TYPE,
DIA_CODE,
VISIT_TIME_START_RESP,
VISIT_TIME_DISCHARGE,
APPOI_NB_DURATION,
VISIT_TX_REASON,
VISIT_TX_COMMENT,
EXTDOC_CODE,
VISIT_PN_REFPHYS_NAME,
PATYPE_CODE,
PAYRESP_CODE,
VISIT_IND_GROUP,
VISIT_PCODE,
VISIT_IND_COMPLETE,
VISIT_IND_ADMISSION,
VISIT_IND_CONFIDENTIALITY,
VISIT_DATE_ACCIDENT,
APPOI_SEQ,
BILLING_CODE,
VISIT_TX_DIAGNOSIS,
CST_CODE_1,
CST_CODE_2,
CST_CODE_3,
APPOI_DH_CRE,
APPOI_CODE_CRE_USER,
APPOI_DH_MOD,
APPOI_CODE_MOD_USER,
VISIT_CODE_CRE_USER,
VISIT_DH_CRE,
VISIT_UPDATED_COUNT,
VISIT_CODE_MOD_USER,
VISIT_DH_MOD,
APPOI_PAYRESP_CODE,
APPOI_DT_ACCIDENT,
PATIENT_LAST_NAME,
PATIENT_FIRST_NAME,
PATIENT_CONFIDENTIALITY,
PATIENT_CHART_EXT,
TO_NUMBER(SUBSTR(PATIENT_CHART_EXT, 1, INSTR(PATIENT_CHART_EXT, '|')-1)) AS PATIENT_CHART_NO,
PAT_IND_SPECIAL_RISK
FROM
SELECT
'VISIT' AS APPOI_OR_VISIT,
VISIT.VISIT_SEQ,
VISIT.PAT_SEQ,
INSTITUTION.INST_CODE,
INSTITUTION.INST_CODE_DISPL,
INSTITUTION.INST_DESC,
CLINIC.CLINIC_CODE,
CLINIC.CLINIC_CODE_DISPL,
CLINIC.CLINIC_DESC,
SPECIALTY.SPEC_CODE,
SPECIALTY.SPEC_CODE_DISPL,
SPECIALTY.SPEC_DESC,
VISIT.VISIT_DATE,
VISIT.VISIT_TIME,
VISIT.VISIT_TIME_ARRIVAL,
VISIT.APPTYPE_CODE,
VISIT.SESSION_DOM_MODE,
VISIT.PRESTYPE_CODE,
VISIT.PRESTYPE_DOM_TYPE,
VISIT.DIA_CODE,
VISIT.VISIT_TIME_START_RESP,
VISIT.VISIT_TIME_DISCHARGE,
VISIT.APPOI_NB_DURATION,
VISIT.VISIT_TX_REASON,
VISIT.VISIT_TX_COMMENT,
VISIT.EXTDOC_CODE,
VISIT.VISIT_PN_REFPHYS_NAME,
VISIT.PATYPE_CODE,
VISIT.PAYRESP_CODE,
VISIT.VISIT_IND_GROUP,
VISIT.VISIT_PCODE,
VISIT.VISIT_IND_COMPLETE,
VISIT.VISIT_IND_ADMISSION,
VISIT.VISIT_IND_CONFIDENTIALITY,
VISIT.VISIT_DATE_ACCIDENT,
VISIT.APPOI_SEQ,
VISIT.BILLING_CODE,
VISIT.VISIT_TX_DIAGNOSIS,
VISIT.CST_CODE_1,
VISIT.CST_CODE_2,
VISIT.CST_CODE_3,
VISIT.APPOI_DH_CRE,
VISIT.APPOI_CODE_CRE_USER,
VISIT.APPOI_DH_MOD,
VISIT.APPOI_CODE_MOD_USER,
VISIT.VISIT_CODE_CRE_USER,
VISIT.VISIT_DH_CRE,
VISIT.VISIT_UPDATED_COUNT,
VISIT.VISIT_CODE_MOD_USER,
VISIT.VISIT_DH_MOD,
NULL AS APPOI_PAYRESP_CODE,
TO_DATE(NULL) AS APPOI_DT_ACCIDENT,
NAME.NAM_PN_NAM AS PATIENT_LAST_NAME,
NAME.NAM_PN_FNAM AS PATIENT_FIRST_NAME,
CONFIDENTIALITY.CONF_DESC AS PATIENT_CONFIDENTIALITY,
PI_SECURITY.F_GET_CHART_NUMBER_SCAN_CODE(VISIT.PAT_SEQ, 103 /*:pChartInstitutionID*/, 0) AS PATIENT_CHART_EXT,
PATIENT.PAT_IND_SPECIAL_RISK
FROM
AS_T_VISITS VISIT,
CT_R_INSTITUTIONS INSTITUTION,
AS_T_CLINICS CLINIC,
CT_R_SPECIALITIES SPECIALTY,
PI_T_NAMES NAME,
PI_T_PATIENTS PATIENT,
PI_R_CONF_LEVELS CONFIDENTIALITY
WHERE
VISIT_DATE >= TO_DATE('2004-04-01', 'YYYY-MM-DD') /*:P_VISIT_DATE_FROM*/ AND
VISIT_DATE <= TO_DATE('2004-04-02', 'YYYY-MM-DD') /*::P_VISIT_DATE_TO*/ AND
CLINIC.CLINIC_CODE = VISIT.CLINIC_CODE AND
SPECIALTY.SPEC_CODE = CLINIC.SPEC_CODE AND
INSTITUTION.INST_CODE(+) = VISIT.INST_CODE AND
NAME.PAT_SEQ = VISIT.PAT_SEQ AND
NAME.NAMTYP_CODE = 1 AND
PATIENT.PAT_SEQ = VISIT.PAT_SEQ AND
CONFIDENTIALITY.CONF_CODE (+) = PATIENT.CONF_CODE
UNION
SELECT
'APPOI' AS APPOI_OR_VISIT,
0 AS VISIT_SEQ,
NVL(APPOINTMENT_GROUP.PAT_SEQ, APPOINTMENT.PAT_SEQ) AS PAT_SEQ,
INSTITUTION.INST_CODE,
INSTITUTION.INST_CODE_DISPL,
INSTITUTION.INST_DESC,
CLINIC.CLINIC_CODE,
CLINIC.CLINIC_CODE_DISPL,
CLINIC.CLINIC_DESC,
SPECIALTY.SPEC_CODE,
SPECIALTY.SPEC_CODE_DISPL,
SPECIALTY.SPEC_DESC,
APPOINTMENT.SESSION_DATE AS VISIT_DATE,
APPOINTMENT.APPOI_TIME AS VISIT_TIME,
'' AS VISIT_TIME_ARRIVAL,
APPOINTMENT.APPTYPE_CODE,
APPOINTMENT.SESSION_DOM_MODE,
0 AS PRESTYPE_CODE,
'' AS PRESTYPE_DOM_TYPE,
0 AS DIA_CODE,
'' AS VISIT_TIME_START_RESP,
'' AS VISIT_TIME_DISCHARGE,
APPOINTMENT.APPOI_NB_DURATION,
APPOINTMENT.APPOI_TX_REASON AS VISIT_TX_REASON,
APPOINTMENT.APPOI_TX_COMMENT AS VISIT_TX_COMMENT,
APPOINTMENT.EXTDOC_CODE,
APPOINTMENT.APPOI_PN_REFPHYS_NAME AS VISIT_PN_REFPHYS_NAME,
APPOINTMENT_TYPE.PATYPE_CODE AS PATYPE_CODE,
0 AS PAYRESP_CODE,
DECODE(APPOINTMENT_GROUP.PAT_SEQ,NULL,0,1) AS VISIT_IND_GROUP,
'' AS VISIT_PCODE,
0 AS VISIT_IND_COMPLETE,
0 AS VISIT_IND_ADMISSION,
APPOINTMENT.APPOI_IND_CONFIDENTIALITY AS VISIT_IND_CONFIDENTIALITY,
TO_DATE(NULL) AS VISIT_DATE_ACCIDENT,
APPOINTMENT.APPOI_SEQ,
0 AS BILLING_CODE,
'' AS VISIT_TX_DIAGNOSIS,
0 AS CST_CODE_1,
0 AS CST_CODE_2,
0 AS CST_CODE_3,
APPOINTMENT.APPOI_DH_CRE AS APPOI_DH_CRE,
APPOINTMENT.APPOI_CODE_CRE_USER AS APPOI_CODE_CRE_USER,
APPOINTMENT.APPOI_DH_MOD AS APPOI_DH_MOD,
APPOINTMENT.APPOI_CODE_MOD_USER AS APPOI_CODE_MOD_USER,
'' AS VISIT_CODE_CRE_USER,
SYSDATE AS VISIT_DH_CRE,
0 AS VISIT_UPDATED_COUNT,
'' AS VISIT_CODE_MOD_USER,
SYSDATE AS VISIT_DH_MOD,
PAYRESP_CODE AS APPOI_PAYRESP_CODE,
APPOI_DT_ACCIDENT,
NAME.NAM_PN_NAM AS PATIENT_LAST_NAME,
NAME.NAM_PN_FNAM AS PATIENT_FIRST_NAME,
CONFIDENTIALITY.CONF_DESC AS PATIENT_CONFIDENTIALITY,
PI_SECURITY.F_GET_CHART_NUMBER_SCAN_CODE(APPOINTMENT.PAT_SEQ, 103 /*:pChartInstitutionID*/, 0) AS PATIENT_CHART_EXT,
PATIENT.PAT_IND_SPECIAL_RISK
FROM
AS_T_APPOINTMENTS APPOINTMENT,
AS_R_APPOINTMENT_TYPES APPOINTMENT_TYPE,
AS_T_CLINICS CLINIC,
CT_R_SPECIALITIES SPECIALTY,
CT_R_INSTITUTIONS INSTITUTION,
AS_T_APPOINTMENT_GROUPS APPOINTMENT_GROUP,
PI_T_PATIENTS PATIENT,
PI_R_CONF_LEVELS CONFIDENTIALITY,
PI_T_NAMES NAME,
AS_T_APPOINTMENT_SEQ_MAPPING SEQMAP
WHERE
SESSION_DATE >= TO_DATE('2004-04-01', 'YYYY-MM-DD') /*:P_VISIT_DATE_FROM*/ AND
SESSION_DATE <= TO_DATE('2004-04-02', 'YYYY-MM-DD') /*::P_VISIT_DATE_TO*/ AND
APPOINTMENT.APPOI_DOM_TYPE IN('A','AR') AND
CLINIC.CLINIC_CODE = APPOINTMENT.CLINIC_CODE AND
SPECIALTY.SPEC_CODE = CLINIC.SPEC_CODE AND
INSTITUTION.INST_CODE(+) = APPOINTMENT.INST_CODE AND
APPOINTMENT_GROUP.APPOI_SEQ (+) = APPOINTMENT.APPOI_SEQ AND
APPOINTMENT_TYPE.APPTYPE_CODE (+) = APPOINTMENT.APPTYPE_CODE AND
NAME.PAT_SEQ = NVL(APPOINTMENT.PAT_SEQ, APPOINTMENT_GROUP.PAT_SEQ) AND
NAME.NAMTYP_CODE = 1 AND
PATIENT.PAT_SEQ = NVL(APPOINTMENT.PAT_SEQ, APPOINTMENT_GROUP.PAT_SEQ) AND
CONFIDENTIALITY.CONF_CODE (+) = PATIENT.CONF_CODE AND
SEQMAP.APPOI_SEQ (+) = APPOINTMENT.APPOI_SEQ AND
SEQMAP.APPOI_SEQ IS NULL
ORDER BY
VISIT_DATE, VISIT_TIME, PATIENT_CHART_NO -
Creating XML Schema from tables With Constraints
Greetings,
I'd have an interesting question. I finally am getting familiar with the various kinds of xml solutions provided by the oracle database, but hey here I have another interesting question I can't seem to get into life. I'm currently generating XML Schemas (XSD) from the tables of my database. Its nice its cool however I'd need to have the table's constraints with the xsd:elements also. And heres my problem, I can't seem to insert the table constrains. I'll show you what I mean:
<xsd:element name="MESSAGE_TABLE">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MESSAGE_RECORD">
<xsd:complexType>
<xsd:all>
<xsd:element name="ID" type="xsd:integer" minOccurs="1" />
<xsd:element name="HEADER">
<xsd:simpleType>
<xsd:restriction base="xsd:string>
<xsd:maxLength value="255" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<!-- I'd need some more things here like... -->
<!-- Primary key(s) -->
<xsd:key name="PK_ID_PRIM">
<xsd:selector xpath="." />
<xsd:field xpath="ID" />
</xsd:key>
<!-- Foreign key(s) -->
<xsd:keyref name="FK_HEADER_FOREIGN" refer="PK_HEADER_ID">
<xsd:selector xpath="HEADER" />
<xsd:field xpath="ID" />
</xsd:keyref>
<!-- Unique constraint(s) -->
<xsd:unique name="UQ_..." ... />
</xsd:unique>
</xsd:element>That would fit my business needs, however I may be so blind that I can't see the forest from the tree. Currently I got so far that:
xmlElement
"xsd:schema",
xmlAttributes
'http://www.w3.org/2001/XMLSchema' as "xmlns:xsd"
xmlElement
"xsd:element",
xmlAttributes
target_table as "name"
xmlElement
"xsd:complexType",
xmlElement
"xsd:sequence",
xmlElement
"xsd:element",
xmlAttributes
target_table || '_RECORD' as "name",
'unbounded' as "maxOccurs"
xmlElement
"xsd:complexType",
xmlElement
"xsd:sequence",
xmlAgg(ELEMENT)
xmlElement
"xsd:Key",
)As you can see this won't be good since I have put a single xml element in there. I guess I'd need something more like an xmlAgg(CONSTRAINTS), however in that case I'm wondering how will the select's FROM part look like.
FROM
SELECT table_name, internal_column_id,
CASE
WHEN data_type IN ('VARCHAR2', 'CHAR')
THEN
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs"
xmlElement
"xsd:simpleType",
xmlElement
"xsd:restriction",
xmlAttributes
'xsd:string' as "base"
xmlElement
"xsd:maxLength",
xmlAttributes
DATA_LENGTH as "value"
WHEN data_type = 'DATE'
THEN
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
'xsd:date' as "type",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs"
WHEN data_type = 'NUMBER'
THEN
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
decode(DATA_SCALE, 0, 'xsd:integer', 'xsd:double') as "type",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs"
ELSE
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
'xsd:anySimpleType' as "type",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs"
end ELEMENT
FROM user_tab_cols c
WHERE TABLE_NAME = target_table
ORDER BY internal_column_id
GROUP BY TABLE_NAME;Thank you very much for all your help!
Regards,
Joey
Edited by: Wrath#87 on 2012.09.05. 22:15Thanks for that, answer. That helped me a lot managing primary constraints. However I still have problems managing foreign keys. I come up with the following formula:
xmlElement
"xsd:schema",
xmlAttributes
'http://www.w3.org/2001/XMLSchema' as "xmlns:xsd"
xmlElement
"xsd:element",
xmlAttributes
upper(target_table) as "name"
xmlElement
"xsd:complexType",
xmlElement
"xsd:all",
xmlAgg(ELEMENT)
SELECT xmlElement
"xsd:key",
xmlattributes
uc.constraint_name as "name"
xmlElement
"xsd:selector",
xmlattributes
'.' as "xpath"
xmlAgg
xmlElement
"xsd:field",
xmlattributes
ucc.column_name as "xpath"
order by ucc.position
FROM user_constraints uc
JOIN user_cons_columns ucc
ON ucc.constraint_name = uc.constraint_name
WHERE uc.table_name = upper(target_table)
AND uc.constraint_type = 'P'
GROUP BY uc.constraint_name
SELECT xmlElement
"xsd:keyRef",
xmlattributes
a.constraint_name as "name"
xmlElement
"xsd:selector",
xmlattributes
c.table_name as "xpath"
xmlAgg
xmlElement
"xsd:field",
xmlattributes
d.column_name as "xpath"
order by c.table_name
FROM all_constraints a,
all_cons_columns b,
all_constraints c,
all_cons_columns d
WHERE a.constraint_name = b.constraint_name
AND a.constraint_name = c.r_constraint_name
AND c.constraint_name = d.constraint_name
AND a.table_name = upper(target_table)
)This gives me the following error message: 00937. 00000 - "not a single-group group function" -
Create table from another table including constraints
Hi,
Is there a way to create a table from another table including constraints.
CREATE TABLE COPY_EMP
as
SELECT *
FROM EMP
WHERE 1 =2 ;
This creates the table, but the constraints are not copied over.
I was reading about DBMS_REDEFINITION - can that be used for this scenario ?
Thanks!
Anand>
I tried that, but the constraint names are posing a problem. And unfortunately our constraints are not named in a standard, so am finding it difficult to replace them.
Was just wondering if there were any simpler approach to this.
>
No - there isn't.
You will have to use new names for the constraints. That usually means extracting the DDL and manually changing the constraint names.
Maybe you are looking for
-
It's a duplicate of https://support.mozilla.org/ru/questions/970266. Created because of silence and impossibility to change a question's category. The situation descripted is a **problem** one. The question is rather similar to http://support.mozilla
-
I find it most annoying that I have to change the style 'Tahoma' to Ariel. Could you show me how I may achieve it. Many thanks in advance KarimEsmail
-
Why is The iTunes Library Extras.itdb file locked?
After my walk this morning I tried to connect up to iTunes to chargemy ipod and update my tunes and got an error message: "The iTunes Library.itdb file is locked, on a locked disc, or you do not have write permission for this file." WHY WHY WHY ???
-
Hi Friends, We upgraded our BW 3.x to NW04s SR1 succesfully. Now we trying to install the Java add-in to the existing NW04s ABAP system. The second step "Database instance Java Add-in" keep failing with following error message. We are on Solaris 9 a
-
T450s Multiple Display Problem
I have a relatively new T450s that I'm just breaking in. When I plug in an external monitor it automatically puts it on the right of the main display, but I want it on the left. So I go into the settings and drag the monitor icon to the left of the