1

古いデータベースで次の問題が発生しています。最近 sql から oracle に移行しましたが、列名が「デフォルト」である挿入ステートメントに問題があります。アイデアはありますか (列名を変更することはできません。これが最善の解決策です!)?

10億以上の列があるだけで、問題を検証するための大きなif-when-else構造内にあるため、実行をすぐに中止することはできません。

EXECUTE IMMEDIATE 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)'
4

2 に答える 2

2

この作業例に示すように、問題は列名に起因するとは思いません:

SQL> CREATE TABLE trytable (ID VARCHAR2(10), "DEFAULT" NUMBER);

Table created

SQL> BEGIN
  2     EXECUTE IMMEDIATE
  3        'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)';
  4  END;
  5  /

PL/SQL procedure successfully completed

技術的には、テーブルの列名に という名前を付けることはできますが、DEFAULTそれが一般的に混乱を招く悪い考えであってもです。は予約語である"ため、二重引用符の構文を介してのみ操作できます。DEFAULT

識別子を二重引用符で囲むと、Oracle はそれらを大文字と小文字を区別するものとして扱うため、テーブルの仕様と一致していることを確認する必要があります。

あなたの場合、特定のエラーメッセージがあると役立ちます。

于 2013-08-21T08:03:10.440 に答える
1

列名が の場合、以下が実行されます"DEFAULT"

BEGIN
EXECUTE IMMEDIATE 'INSERT INTO TRYTABLE(ID, "DEFAULT")VALUES(''monkey1'',0)';
END;

「DEFAULT」と「デフォルト」は違います。

于 2013-08-21T08:05:38.483 に答える