-1

しばらくの間、Java ベースの Squirrel SQL クライアント バージョン 3.4.0 を使用した単純な Update ステートメントで頭を悩ませていました (注: これは TOAD for Oracle では問題なく動作しますが、長期的には Squirrel を使用することが予想されます。

クエリは次のとおりです。

UPDATE txn_header
SET KNZ = ' ', "TIMESTAMP" = ' '
WHERE ORGU_CODE_CMPY = '001'
and ORGU_CODE = '0040'
and TILL_SHORT_DESC = '061' 
and KNZ = 'WT'
and TXHD_TXN_NR between 729167 and 730881;

私の問題は、TIMESTAMP が Oracle PL/SQL の予約語であることです。調査によると、Oracle の予約語は二重引用符 "TIMESTAMP" で囲む必要があります。しかし、これは実行された最後の成功したクエリを実行するようです。

私も試してみました

'TIMESTAMP'
[TIMESTAMP] 
(TIMESTAMP = " ") 
("TIMESTAMP = " ") 

空白は意図されたものです

最後に成功したクエリは次のとおりです。

SELECT knz, count(*) 
   from TXN_HEADER
group by knz

控えめに言っても混乱しており、データベース管理の専門家でもありません。

編集 - 2013 年 10 月 1 日作成

また、TIMESTAMP列名にバックティックを使用してみました

UPDATE txn_header
SET KNZ = ' ', TXN_HEADER.`TIMESTAMP` = ' ' 
WHERE ORGU_CODE_CMPY = '001' 
and ORGU_CODE = '0040'
and TILL_SHORT_DESC = '061' 
and KNZ = 'WT'
and TXHD_TXN_NR between '729167' and '729167'

次のエラーが表示されます。

Error: ORA-00911: invalid character

SQLState:  42000
ErrorCode: 911
Position: 44

Squirrel の GUI は、私が以前から予約語の解決策として見てきたバッククォートを指しています..

接続しているサーバーは Oracle 11 サーバーです

ありがとう、デビッド・バーキン

4

1 に答える 1

0

次のテーブル定義を使用すると、更新は v3.4 で正常に機能します。

create table txn_header (
    knz varchar2(100),
    "TIMESTAMP" timestamp,
    ORGU_CODE_CMPY varchar2(100),
    ORGU_CODE varchar2(100),
    TILL_SHORT_DESC varchar2(100),
    TXHD_TXN_NR integer
)

テーブル作成ステートメントを提供できますか?

于 2013-01-10T12:11:26.693 に答える