ORA-00922: missing or invalid option — 定義欄位或儲存子句時指定了無效選項。合法的欄位選項僅 NOT NULL;DATE/LONG 指定長度也會觸發此錯誤。
$ORACLE_HOME/hostname_sid/sysman/config/emoms.properties 全域可讀,含 SYSMAN 明文密碼。f00bar!!),postDBCreation.log 會記錄失敗的 ALTER USER ... IDENTIFIED BY f00bar!! 並顯示 ORA-00922,導致密碼洩露。emoms.properties 權限,避免密碼含特殊字元。PROMPT ACCEPT in_beg_date PROMPT 'Enter beginning extract date mm/dd/yy '
PROMPT ACCEPT in_end_date PROMPT 'Enter ending extract date mm/dd/yy '
DECLARE
beg_date VARCHAR2(8) := &in_beg_date;
end_date VARCHAR2(8) := &in_end_date;
BEGIN
beg_dte := TO_DATE(beg_date, 'MM/DD/YY');
...
IF (outrec_abs_date >= beg_dte and <= end_dte) THEN ...
SQL*Plus 將 &in_beg_date 直接置換為使用者輸入的 09/01/03,產生 beg_date VARCHAR2(8) := 09/01/03;。這被視為數值運算式 (9/1)/3 = 3,而非字串常值,導致語法錯誤。
beg_date VARCHAR2(8) := '&in_beg_date';
end_date VARCHAR2(8) := '&in_end_date';
單引號不可省略,確保置換後仍為合法字串常值。
PROMPT 僅列印提示訊息;ACCEPT 等待輸入並建立置換變量,兩者皆為 SQL*Plus 命令,須置於 PL/SQL 區塊外。SET VERIFY ON (預設) 可看到 old/new 置換對照,利於除錯。&var 置換進 PL/SQL 的字串/日期常值,務必在腳本中預先加上單引號。