5

DB2 で単純な SQL ステートメントを実行しようとしていますが、いくつか問題があります。txt/db2 ファイルに単一のスクリプトを作成し、エンジンにすべてのコマンドを処理させたいと考えています。

スクリプトは次のとおりです。

CONNECT TO MYDB

CREATE TABLE PERSONS(
     PID SMALLINT NOT NULL,
     NAME VARCHAR(20) NOT NULL
)

TERMINATE

db2 -f /pathtofile を実行すると、次のようになります。

SQL0104N  An unexpected token "(" was found following "CREATE TABLE PERSONS".  
Expected tokens may include:  "END-OF-STATEMENT".  SQLSTATE=42601

私は何を間違っていますか?私のスクリプトに何か問題がありますか? また、「;」なしで機能するのはなぜですか 私のステートメントの最後にターミネーター?

ありがとうございました、

4

5 に答える 5

4


http://www.uc.edu/R/r25/documentation/Version3.2/install_instructions.pdf : _

スクリプトはセミコロン (;) を使用して各 SQL コマンドを終了します。DB2 コマンド行プロセッサーを使用する場合は、「-t」フラグを使用することを忘れないでください。
...
-t フラグを使用しないと
、db2ct32.sql スクリプトの実行時に次のよう なエラーが発生 し
ます。コマンド ライン プロセッサ コマンド。SQL 処理中に次が返されました: SQL0104N 予期しないトークン "(" が "ate table "ACCOUNTS"" の後に見つかりました。 予期されるトークンには、"END-OF-STATEMENT" が含まれる場合があります。SQLSTATE=42601



したがって、セミコロンを追加して、意味のないものを -t スイッチで呼び出します。
サンプルを調べたところ、次のようなものを使用しています

db2 -tf "pathtofile"

また、

db2 -tvf "pathtofile"

より多くの診断を受けることができます。
プロプライエタリなソフトを限界まで押し込まないでください。幅はそれほど広くありません。

于 2009-02-20T05:43:37.467 に答える
2

名前行の後にコンマがあります

変化する:

NAME VARCHAR(20) NOT NULL,

に:

NAME VARCHAR(20) NOT NULL
于 2009-02-20T04:27:10.897 に答える
1

セミコロンを含めて -t フラグを使用すると、次のようになります。

SQL0104N  An unexpected token "/" was found following "BEGIN-OF-STATEMENT".  
Expected tokens may include:  "<values>".  SQLSTATE=42601
于 2009-02-20T06:01:24.663 に答える
0

スペースを含まない次の構文は、コマンド ラインで正しく機能します。

CREATE TABLE PERSONS (PID SMALLINT NOT NULL, NAME VARCHAR(20) NOT NULL)

段落スタイルではなく、これを使用してファイルをフォーマットすると、ここでの私の割り当てで機能しました- http://www.eecs.yorku.ca/course_archive/2016-17/F/3421/project/create/yrb-create.txt

于 2016-11-11T14:21:27.513 に答える
0

安全のために、CREATE TABLE PERSONS と ( の間にスペースまたは行区切りを挿入し
ます。

于 2009-02-20T05:10:19.030 に答える