国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle錯誤案例:ORA-00922

2024-08-29 13:31:55
字體:
來源:轉載
供稿:網友
國內最大的酷站演示中心!

ora-00922 missing or invalid option 
0ra-00922: 丟失或者無效的選項

  cause an invalid option was specified in defining a column or storage clause. the valid option in specifying a column is not null to specify that the column cannot contain any null values. only constraints may follow the datatype. specifying a maximum length on a date or long datatype also causes this error.
 
  action correct the syntax. remove the erroneous option or length specification from the column or storage specification. 

  案例一:oracle明文密碼漏洞

  受影響系統:

  oracle oracle10g application server 9.0.4.0
  oracle oracle10g application server 10.1.0.2
  描述:

  oracle database是一款商業性質大型數據庫系統。

  oracle 10g存在包含明文密碼的全局可讀文件,本地攻擊者可以利用這個漏洞獲得對數據庫的訪問。

  sysman帳戶的密碼可在'$oracle_home/hostname_sid/sysman/config/emoms.properties'文件中獲得,此文件全局可讀。

  另外如果安裝oracle 10g時提供sys, system, dbsnmp和sysman 帳戶密碼相同,并且密碼有驚嘆號(如f00bar!!),那么當設置sysman和dbsnmp密碼時db安裝會出現錯誤,錯誤信息"postdbcreation.log"會記錄密碼:

  alter user sysman identified by f00bar!! account unlock
error at line 1:
ora-00922: missing or invalid option

  alter user dbsnmp identified by f00bar!! account unlock
error at line 1:
ora-00922: missing or invalid option

  <*來源:david litchfield ([email protected])
 
  鏈接:http://marc.theaimsgroup.com/?  l=bugtraq&m=110382247308064&w=2
  *>

  建議:

  廠商補丁:

  oracle
  ------
  oracle已經發布patch (#68)來修正此漏洞:

  http://metalink.oracle.com/

案例二:置換變量

  我才剛開始使用oracle的產品,我在執行下面兩條命令的時候遇到了問題:accept 和prompt。我已經更改了行的順序,有時候放在char中,有時候刪除,有時候放在prompt中,有時候刪除。無論我怎么做還是收到錯誤信息。我甚至試過把accept 和prompt放在begin的前后。
我想做的事情是這樣的。在腳本的開始,我從鍵盤讀取開始和結束日期,然后在程序的主要部分,我從一個表中使用select讀取,并測試看日期是否在鍵盤輸入的兩個日期之間。現在當我在sql*plus中執行/編譯腳本的時候,我得到的錯誤信息是ora-00922。

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;
   beg_dte  date;
   end_dte  date;
...
begin
   beg_dte := to_date (beg_date, 'mm/dd/yy');
   end_dte := to_date (end_date, 'mm/dd/yy');
...
   if (outrec_abs_date >= beg_dte and <= end_dte) then
...

  說實話,看起來你對prompt 和 accept 有一個很好的理解。prompt 告訴sql*plus 在屏幕上書寫一行文字。你在這里使用了兩個prompt命令;每個命令都在屏幕上打印一個空行,這對于垂直間距很有好處。accept命令是等待用戶輸入一個置換變量的值。accept命令中可選的prompt 子句在用戶輸入數值的同一行中顯示了一條信息。你在pl/sql 塊的外面放置prompt 和 accept 是正確的:他們是sql*plus 命令,不是pl/sql 。

  你可能注意到當你運行這個腳本的時候,每一個擁有置換變量的行都引起了屏幕上的兩行輸出,例如:
old   3:    beg_date varchar2(8) := &in_beg_date;
new   3:    beg_date varchar2(8) := 09/01/03;

  這就顯示了sql*plus 在看到一行包括了置換變量的代碼的時候所作的工作:他用變量的數值(以&開頭)置換了變量的名字。這就像你在文本編輯器,例如記事本中,用查找和置換一樣,將一個字符串的每個出現(這里是&in_beg_date)都替換成了另一個字符串(09/09/03)。“原來”的行就是在代碼中的樣子。“新”的行是將要執行的樣子。如果你執行了"beg_date varchar2(8) := 09/01/03;"語句,會發生什么?sql*plus 會創建一個字符串變量并且用":="右側的數值來進行初始化。在這個案例中,它是一個數字表達式,那么sql*plus 就會檢測"(9/1) / 3"這個表達式,并將答案寫為'3'。你實際的意思是:

  beg_date varchar2(8) := '&in_beg_date';
  end_date varchar2(8) := '&in_end_date';
  單引號是至關重要的。

  本文國際來源:http://searchoracle.techtarget.com/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 勐海县| 新源县| 洞口县| 馆陶县| 额尔古纳市| 平武县| 开封县| 景洪市| 镇坪县| 肇庆市| 昌宁县| 文昌市| 枞阳县| 金昌市| 合阳县| 通化市| 佛山市| 大城县| 柳江县| 邵东县| 乐安县| 绩溪县| 资源县| 巍山| 阆中市| 公主岭市| 巴马| 平顶山市| 宿州市| 府谷县| 兴隆县| 马鞍山市| 潮州市| 稻城县| 永康市| 水富县| 胶州市| 花垣县| 新津县| 新巴尔虎右旗| 彰化县|