2

SAS データセットから Oracle テーブルを作成しようとしていました。多くの場合は成功していますが、特定のデータセットに行き詰まっています。以下のログファイルを提供しています。Linux で SAS 9 と Oracle 11.2.0.1.0 を使用しています。

助言がありますか?

1          libname dibsdata "/data2/dibyendu/Jan_9/on_demand/";
NOTE: Libref DIBSDATA was successfully assigned as follows:
      Engine:        V9
      Physical Name: /data2/dibyendu/Jan_9/on_demand
2          libname myora oracle user=sasuser password=XXXXXXXXXX path=CIOEDATA ;
NOTE: Libref MYORA was successfully assigned as follows:
      Engine:        ORACLE
      Physical Name: CIOEDATA
3          data myora.on_demand;
4              set dibsdata.on_demand;
5          run;

NOTE: SAS variable labels, formats, and lengths are not written to DBMS tables.
ERROR: Error attempting to CREATE a DBMS table. ERROR: ORACLE execute error: ORA-00904: : invalid identifier..
NOTE: The DATA step has been abnormally terminated.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: SAS set option OBS=0 and will continue to check statements. This might cause NOTE: No observations in data set.
WARNING: The data set MYORA.ON_DEMAND may be incomplete.  When this step was stopped there were 0 observations and 48 variables.
ERROR: ROLLBACK issued due to errors for data set MYORA.ON_DEMAND.DATA.
NOTE: DATA statement used (Total process time):
      real time           0.06 seconds
      cpu time            0.00 seconds


ERROR: Errors printed on page 1.
2                                                          The SAS System                           17:00 Wednesday, January 9, 2013


NOTE: SAS Institute Inc., SAS Campus Drive, Cary, NC USA 27513-2414
NOTE: The SAS System used:
      real time           1.24 seconds
      cpu time            0.04 seconds
4

1 に答える 1

3

Oracle エラーORA-00904は、無効な列名でテーブルを作成しようとしていることを意味します。ほとんどの場合、名前が 30 文字を超える SAS 変数があるか、Oracle の予約語です。たとえば、次の SAS データセットの 2 つの変数は、Oracle では無効です。

data a;
  column_name_too_long_for_oracle = 1;
  date = today(); /* This is a reserved word */
run;

Oracle 11g の予約語リストは次のとおりです。SAS データセットの変数名を確認し、Oracle で有効な名前に変更してください。たとえば、攻撃者がDATEという名前の SAS 変数である場合は、次のようにします。

data myora.on_demand;
   set dibsdata.on_demand(rename=(DATE=PROJ_DATE));
run;
于 2013-01-10T14:19:43.353 に答える