1

ORACLE SQL クエリを文字列形式で渡す必要がある一括挿入/更新クエリを作成する必要がありますが、Delphi での SQL クエリ文字列の解析にパフォーマンスの問題があるため、パラメータ化されたクエリを使用できません。

私の懸念は、これらのクエリを作成して float 値を渡すときに、データベースの NLS_NUMERIC_CHARACTERS を気にする必要があるかということです。今のところ、クエリを次のように渡しています。

   "INSERT ALL
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (123, 123.123)
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (345, 345.345)
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (456, 456.456)
    SELECT * FROM DUAL"

代わりに NLS_NUMERIC_CHARACTERS の値を読み取ってから、小数点記号が「,」の場合、次の一括クエリを実行する必要がありますか?それとも、これは DB サーバーによって処理されますか?

   "INSERT ALL
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (123, '123,123')
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (345, '345,345')
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (456, '456,456')
    SELECT * FROM DUAL"

SQL サーバーの実装はどのようにする必要がありますか?

4

1 に答える 1

3

NLS_NUMERIC_CHARACTERS は、文字列 ( varchar) を数値に、または数値を文字列に変換する場合にのみ使用されます。to_char()or を使用する場合、変換が暗黙的(2番目の例のように)か明示的かは問題ではありませんto_number()

プレーン SQL 数値リテラル (=定数)は、常に.小数点としてを使用します。NLS_NUMERIC_CHARACTERS の値に関係なく、数字のようなもの123.123は常に正しく処理されます。これは SQL Server にも当てはまります。

「 SQLサーバー用の実装」とはどういう意味かわかりません。複数の行を挿入するinsertステートメントに関するものである場合、SQL Server(および標準SQL)で同等のものは次のようになります。

INSERT INTO EMPLOYEE 
  (EMP_ID, EMP_SAL) 
VALUES 
  (123, 123.123),
  (345, 345.345),
  (456, 456.456);
于 2016-01-08T10:32:14.780 に答える