2016-09-14 6 views
0

現在、 ' - 'を使用してデータ(口座番号)を含むテーブルを作成する最善の方法を見つけようとしています。ここに私の目標は以下のとおりです。Oracleでハイフン ' - 'を使用してデータを含むSQLテーブルに挿入&挿入する10g

  1. は、テーブルを作成し、AcctNum列に口座番号を挿入して、プレフィックス&サフィックス行が空に保つことができるよう、私がしようとしています
  2. ...ので、入力されたものに基づいてプリフィックス列とサフィックス列を自動的に入力するコマンドを記述するには、AcctNum列の " - " の後に&を入力してください。

表の例目標:

enter image description here

マイコード:

set echo on 

/* --------------- 
    Create table structure 
    --------------- */ 

drop table accounts; 

----- 
----- 

CREATE TABLE accounts (
    acctnum VARCHAR(10), 
    prefix VARCHAR(5), 
    suffix VARCHAR(5), 
    PRIMARY KEY (acctnum), 
); 


INSERT ALL 
    INTO accounts(acctnum, prefix, suffix) values(123-0097,NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values(X089-056,NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values(123-0097,NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values(123-0098,NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values(F3377-D,NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values(X089-057,NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values(X089-058,NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values(3-009712,NULL,NULL) 

SELECT * 
    FROM dual; 


commit; 

すべてのヘルプは大歓迎です。ありがとうございました!

+1

ご質問がOracleについてのものである場合は、無関係のタグを遠隔操作してください。 –

+0

完了、お詫び申し上げます。 – Lukon

答えて

3

これは、複数の行を挿入する非常に奇妙な方法のようです。これはどう?本当の改善は、文字列リテラルの周りに単一引用符を入れていることを

INSERT INTO accounts(acctnum, prefix, suffix) 
    SELECT '123-0097', NULL, NULL FROM DUAL UNION ALL 
    SELECT 'X089-056', NULL, NULL FROM DUAL UNION ALL 
    SELECT '123-0097', NULL, NULL FROM DUAL UNION ALL 
    SELECT '123-0098', NULL, NULL FROM DUAL UNION ALL 
    SELECT 'F3377-D', NULL, NULL FROM DUAL UNION ALL 
    SELECT 'X089-057', NULL, NULL FROM DUAL UNION ALL 
    SELECT 'X089-058', NULL, NULL FROM DUAL UNION ALL 
    SELECT '3-009712', NULL, NULL FROM DUAL ; 

注意。

さらに、VARCHAR()ではなく、文字列にVARCHAR2()を使用することをお薦めします。

+0

Oracleでこれを動作させるには、 'select'に' from dual'が必要です。 –

2

私があなたを理解したかどうかわかりません、行こう!

1.Your insertコマンドは、以下の修正が必要な例です。

INSERT ALL 
    INTO accounts(acctnum, prefix, suffix) values('123-0097',NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values('X089-056',NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values('123-0098',NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values('F3377-D',NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values('X089-057',NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values('X089-058',NULL,NULL) 
    INTO accounts(acctnum, prefix, suffix) values('3-009712',NULL,NULL) 
SELECT * FROM DUAL; 

2.Soは、あなたが他の列を得るためにあなたのコマンドを作成する必要があり、例:

SELECT 
    NVL(SUBSTR(acctnum, 0, INSTR(acctnum, '-')-1), NULL) AS prefix, 
    NVL(SUBSTR(acctnum, INSTR(acctnum, '-')+1, LENGTH(acctnum)), NULL) AS suffix 
FROM accounts; 

私はOracleなどを使用しました。他のデータベースの場合は、文字列関数を変更する必要があります。

関連する問題