2016-09-08 13 views
0

メインテーブルにデータを挿入しながら私がしたいのは何ですか。私はまず古いデータを履歴テーブルに挿入しています。履歴表には、メイン表の内容が2列あり、HISTSEQ_NOHIST_DATEです。列として(SEQUENCE_NO)を持つ履歴テーブルに値を挿入することができません

私の下のコードで挿入しています。 SEQUENCE一部を処理するための方法が十分ではない値

だから、私は

ORA-00947としてエラーを取得しています。私がオラクルのチャンピオンではないので、親切に私を助けてください。テーブルの

string queryInsert; 
     queryInsert = "insert into xxacl_pN_LEASES_ALL_h select sysdate, t.* from xxacl_pN_LEASES_ALL t"; 
     OracleConnection conInsert = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString()); 
     OracleCommand cmd1 = new OracleCommand(); 
     string allQueries = queryInsert; 
     cmd1.CommandText = allQueries; 
     cmd1.Connection = conInsert; 
     conInsert.Open(); 
     cmd1.ExecuteNonQuery(); 

スクリプト

CREATE TABLE XXCUS.XXACL_PN_LEASES_ALL_H 
    (
     HISTSEQ_NO     NUMBER   NOT NULL, 
     HIST_DATE     DATE    NOT NULL, 
     MKEY       NUMBER, 
     LEASE_ID      NUMBER, 
     LAST_UPDATE_DATE    DATE    NOT NULL, 
     LAST_UPDATED_BY    NUMBER   NOT NULL, 
     CREATION_DATE    DATE    NOT NULL, 
     CREATED_BY     NUMBER   NOT NULL, 
     LAST_UPDATE_LOGIN   NUMBER, 
     LEASE_NUM     VARCHAR2(30 BYTE) NOT NULL, 
     PARENT_LEASE_ID    NUMBER, 
     ADDRESS_LOCATION_ID   NUMBER, 
     LEASE_TYPE_CODE    VARCHAR2(30 BYTE) NOT NULL, 
     PAYMENT_TERM_PRORATION_RULE NUMBER, 
     ABSTRACTED_BY_USER   NUMBER   NOT NULL, 
     COMMENTS      VARCHAR2(240 BYTE), 
     STATUS      VARCHAR2(1 BYTE), 
     ORG_ID      NUMBER(15)  DEFAULT NULL, 
     LEASE_CLASS_CODE    VARCHAR2(30 BYTE) NOT NULL, 
     LEASE_STATUS     VARCHAR2(30 BYTE) NOT NULL, 
     CUSTOMER_ID     NUMBER(15), 
     DELETE_FLAG     CHAR(1 BYTE), 
     PROJECT_ID     NUMBER, 
     BUILDING_ID     NUMBER, 
     FLOOR_ID      NUMBER, 
     FLAT_ID      NUMBER, 
     CARPET_AREA     VARCHAR2(30 BYTE), 
     SALEABLE_AREA    VARCHAR2(30 BYTE), 
     FLAT_TYPE     VARCHAR2(30 BYTE), 
     FLAT_STATUS     VARCHAR2(30 BYTE), 
     FLAT_SUBSTATUS    VARCHAR2(30 BYTE), 
     CEF_MKEY      NUMBER, 
     BOOKING_NO     NUMBER, 
     ASSIGNED_TO     NUMBER, 
     APPROVER_LAVEL    NUMBER, 
     PDC_TYPE      VARCHAR2(30 BYTE), 
     IS_MIGRATED     CHAR(1 BYTE), 
     SYS_CREATION_DATE   DATE, 
     F_UPDATED_BY     NUMBER, 
     F_FOLLOWUP_DATE    DATE, 
     F_ACTIVITY_ID    NUMBER, 
     F_SUB_ACTIVITY_ID   NUMBER, 
     F_FOLLOWUP_TYPE_ID   NUMBER, 
     F_NEXT_FOLLOW_UP_DATE  DATE, 
     F_NEXT_ACTIVITY_ID   NUMBER, 
     F_NEXT_SUB_ACTIVITY_ID  NUMBER, 
     F_REMARKS     VARCHAR2(500 BYTE), 
     F_FOLLOWUP_SR_NO    NUMBER, 
     F_REASSIGN_REASON   NUMBER(10), 
     USER_TYPE     VARCHAR2(10 BYTE), 
     LOCATION_ID     NUMBER(10), 
     F_LAST_UPDATE_DATE   DATE, 
     F_TASK_ID     NUMBER(10), 
     F_TASK_SR_NO     NUMBER(10), 
     BOOKING_DATE     DATE, 
     INV_DATE      DATE, 
     LOAN_DETAILS     VARCHAR2(10 BYTE), 
     AUTO_GEN_BILLING    VARCHAR2(10 BYTE), 
     ADF       VARCHAR2(10 BYTE), 
     SALES_USER_ID    NUMBER(10), 
     PREDEFINED_CUST    CHAR(1 BYTE), 
     SCHEME_ID     NUMBER(10), 
     LOCK_PERIOD     NUMBER(10), 
     NO_OF_DAYS     NUMBER(10), 
     TYPE_OF_BOOKING    VARCHAR2(10 BYTE), 
     RENTFREE_PERIOD    DATE, 
     FREE_NO_DAYS     VARCHAR2(250 BYTE), 
     LOI_DATE      DATE 

+0

の心の順に保つには、HISTSEQ_NOの自動インクリメントですか? –

+0

@BobBrinks:はい、それは自動インクリメントされます.. – BNN

+0

@nad Oracleには自動インクリメント列がありません。シーケンスを使用する必要があります。 あなたがXXCUSスキーマの所有者である場合。シーケンスを作成し、それを使用して一意の値を取得することができます。それ以外の場合は、DBAに作成順序を依頼してください。 – AlexSmet

答えて

1

すでに追加の列にsysdateの値を追加しました。HIST_DATE二次列HISTSEQ_NOの値を追加する必要があります。あなたはテーブルxxacl_pN_LEASES_ALL_hのシーケンスを持っていますか、使用できる別のシーケンスがあるかもしれませんか?あなたはシーケンスmy_seqを持っている場合

たとえば、あなたがあなたのクエリでそれを使用することができます。

insert into xxacl_pN_LEASES_ALL_h 
    select 
     my_seq.nextval, sysdate, t.* 
    from 
     xxacl_pN_LEASES_ALL t 

しかし、列

+0

xxacl_pN_LEASES_ALL_hにこのように追加すると、xxacl_pN_LEASES_ALLからHISTSEQ_NO.next_val、sysdate、t。*を選択します。 ** ORA-00904: "HISTSEQ_NO"。 "NEXT_VAL":無効な識別子** – BNN

+0

参照のためにテーブルを更新しました – BNN

+0

@nad 'HISTSEQ_NO'はシーケンスですか? – AlexSmet

0

変更するには、自動インクリメント値を除いた(挿入したいフィールド)

queryInsert = "insert into xxacl_pN_LEASES_ALL_h(<insert column names here>) select sysdate, t.* from xxacl_pN_LEASES_ALL t"; 

が含まれるようにINSERTクエリここで列名の順序が重要です。

関連する問題