1

単純な SQL スクリプトで変数を宣言してスキーマにいくつかのテーブルを作成しようとしていますが、うまくいきません。

これが私のSQLスクリプトのスニペットです:

DEF SCHEMA_NAME = MY_SCHEMA;

CREATE TABLE &SCHEMA_NAME.BOOK
(
    BOOK_ID            INTEGER
);

これは、スキーマで名前がMY_SCHEMABOOK付けられたテーブルではなく、テーブル名を持つテーブルを作成しています。BOOKMY_SCHEMA

Oracle Sql Developer のスクリプト出力は次のように述べています。

old:CREATE TABLE &SCHEMA_NAME.BOOK
(
    BOOK_ID            INTEGER
)
new:CREATE TABLE MY_SCHEMABOOK
(
    BOOK_ID            INTEGER
)
table MY_SCHEMABOOK created.

それが役立つ場合。また、それを変更すると&SCHEMA_NAME..BOOK、希望どおりに機能するように見えますが、ピリオドを 2 つ入れなければならないのは意味がありません。誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

1

SET CON[CAT] {. | | c | オン | オフ}

SQL*Plus が次の文字を変数名の一部として解釈する場合に、置換変数参照を終了するために使用される文字を設定します。

CONCAT をオンにすると、SQL*Plus は CONCAT の値をピリオドにリセットします。

http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm#sthref2722

SQL Developer も同じように機能します。最初のピリオドは置換変数ターミネータとして解釈されます。したがって、この場合、連続する 2 つのピリオドを使用することは完全に有効です。

于 2013-07-03T05:11:32.113 に答える