他の2つのテーブルのデータに基づいて数値をテーブルに挿入しようとしています。これらの数値はテーブルSL_TERMS
の文字列に関連付けられています。これらの文字列は、他のテーブルUPLOAD_TEST
に使用されています。このテーブルには、データを入れたいPC_TEST
があります。別のテーブルの文字列に基づいて関連IDを挿入
たとえば、UPLOAD_TEST
に文字列 "environment"があり、そのIDがSL_TERMS table
に1の場合、PC_TEST
に値1を挿入します。無効な番号エラー:
INSERT INTO PC_TEST (TEST_ID, WHAT_ID, DATA_FORM)
SELECT PC_TEST_SEQ.NEXTVAL, t.TERM_ID, e.DATA_FORM FROM SL_TERMS t, UPLOAD_TEST e
WHERE t.TERM_ID IN
(SELECT WHAT FROM UPLOAD_TEST e WHERE e.WHAT = t.TERM_NAME AND t.TERM_NAME = t.TERM_ID);
--TERM_NAME is the field that has the string associated with the needed ID
そして
INSERT INTO PC_TEST (TEST_ID, WHAT_ID, DATA_FORM)
SELECT PC_TEST_SEQ.NEXTVAL, t.TERM_ID, e.DATA_FORM FROM SL_TERMS t
INNER JOIN UPLOAD_TEST e
ON e.WHAT = t.TERM_NAME AND t.TERM_NAME = t.TERM_ID; --using join keyword
どちら
が ORA-01722を与える:ここでは、これまでのコードの2つの例を示します。WHAT_ID
フィールドとTERM_ID
フィールドは両方とも数値です。文字列が正しく一致しない可能性はありますか?その場合はUPLOAD_TEST
の文字列にTRIM
および/またはLOWER
の関数を適用する必要があります。どんな助言/提案も感謝しています。 e.WHAT
とt.TERM_NAME
は、1対多の関係を持つ同じフィールドです。したがって、SL_TERMS
では、値TERM_NAME = 'environment'
が1度存在し、それに対応するTERM_ID = 1
も存在します。 UPLOAD_TEST
の複数のレコードに存在する可能性があります。
したがって、フローはe.WHAT
(文字列) - >t.TERM_NAME
(文字列) - >t.TERM_ID
(数値)です。
私がe.WHAT
(t.TERM_NAME
)と呼ぶとき、私は関連IDが必要なので、私がt.TERM_NAME
からt.TERM_ID
に等しい理由はです。私はこれが正しい方法であるかどうかは分かりませんでした(それはそうではないようです)ので、ID(TERM_ID
)を文字列(TERM_NAME
)から呼び出す方法があれば、それが必要です。
' t.TERM_NAME = t.TERM_ID'について確信していますか?あなたは 'TERM_ID'数値ですが、 'TERM_NAME'のように聞こえません。3つのテーブル構造とサンプルデータをすべてあなたの質問に追加してください。ただし、その句は削除する必要があります。 –
私に知らせてください – snl330