0

ユーザーを使用してディレクトリを作成するときsytemvin.txtは私のファイルです)

create directory emp_dir1 
     AS "'C:\Documents and Settings\Administrator\Desktop\vin.txt'";

それはそれを作成します。

ユーザーを使用して同じことを行うとScott、ファイルのパスにエラーが発生します

"Identifier is too long"

しかし、このファイル パスを scott の二重引用符ではなく単一引用符で囲むと、それが作成されます。

背後にある理由は何ですか?

4

2 に答える 2

1

なぜ二重引用符を使用しているのですか?

Oracle の文字列には一重引用符がありますが、列名とテーブル名の前後には二重引用符を使用できます。


Oracle 10.2(周りに何もありません)を使ってみましたが9g、これを再現できません。どのユーザーを使用しても、機能しません。

文字列があなたのものと同じくらい長いとき、私はいつも得る

ORA-00972: 識別子が長すぎます

短いパス ( CREATE DIRECTORY emp_dir1 As "C:\vin.txt";)を試すと、

ORA-01780: 文字列リテラルが必要です

于 2010-03-20T09:18:50.167 に答える
1

あなたの質問についていくつか気になることがあります。

まず、SCOTT などの通常のユーザーがディレクトリを作成するべきではありません。oracleCREATE ANY DIRECTORY は非常に強力です。これは、アカウントがアクセスできる任意の OS ディレクトリに対する読み取り/書き込み権限を付与するためです。これは巨大なセキュリティ ホールです。

次に、ディレクトリ パスは、ファイルを含まない単なるパスでなければなりません。UTL_FILE、Data Pump などを使用してファイルを作成します。UTL_FILE.FOPEN()渡された DIRECTORY が実際には OS ディレクトリではなくファイルへのパスである場合、への呼び出しは失敗します。

SYSTEM によって正常に実行された同じステートメントが、SCOTT によって実行されたときに失敗する理由を説明できません。手元に 9i がないので、テストできません。何が起こるかを確認できるように、SQL*Plus の出力全体をカット アンド ペーストしてください。ピーターが指摘したように、あなたの質問にはタイプミスが含まれているように見えたので、現時点では、あなたが考えていることが実際に起こっていることであると確信することはできませ.

于 2010-03-20T09:33:18.800 に答える