iT邦幫忙

0

如何用PL-SQL在ORACLE資料庫內所有資料表之中搜尋資料

  • 分享至 

  • xImage

有一個資料庫AA
資料表有3個,分別是A.B.C
而資料表裡又有很多欄位
要如何在這裡面找出有關鍵字"想要搜尋的名稱"的欄位資料

會有這問題是因為使用者在前台系統建立一個商品代號
建立之後系統會自動在"商品基本資料"."庫存資料"...等等的資料表中建立資料
但是我不清楚總共有哪些資料表有這筆資料,只能用這種方式去找

我在網路上有找到MS SQL的方法
http://wp.mlab.tw/?p=1552
http://blog.miniasp.com/post/2010/07/12/Search-all-columns-of-all-tables-in-a-database-for-a-keyword.aspx
但是這方法在ORACLE資料庫無法執行
PL-SQL變數宣告我找資料是把@取除,=用:=給值
但是裡面的QUOTENAME函數跟PARSENAME函數在PL-SQL裡不存在
網路上也沒找到類似功能的函數
請問有人知道別的方法或是這該如何修改嗎

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
海綿寶寶
iT邦大神 1 級 ‧ 2017-02-20 12:04:00

試試看這個
作者是 2015/01/06 寫的

用這個出現錯誤
ORA-19202: Error occurred in XML processing
ORA-00932: inconsistent datatypes: expected CHAR got BLOB
ORA-06512: at "SYS.DBMS_XMLGEN", line 288
ORA-06512: at line 1 SQL3.sql 9 25
看起來是SYS.DBMS_XMLGEN這個問題,但是我不知道要怎麼看這個功能...

1
做工仔人!
iT邦大師 1 級 ‧ 2017-02-20 14:00:03

其實樓主的問題有點籠統.
1.要從三個TABLE 中找到資料.只要JOIN KEY 下對,應該用SELECT 就可以將資料找出來.(可以不必用到變數) SELECT A.A2,B.B2,C.C3 from AAA A , BBB B , CCC C WHERE A.A1=B.B1 AND B.2=C.1
2.一般在PL-SQL中會用到變數.就會用到 Stored Procedure .如果是用 Stored Procedure,可以參考這篇另一篇.
3.定義變數用@開頭是 MS-SQL 特有的語法.在其他資料庫並不適用.
4.WHERE 條件中做字串包含方式的語法為 LIKE.例:
WHERE IMA01 LIKE 'ABC%' - IMA01欄位中所有'ABC'開頭的資料.
WHERE IMA01 LIKE '%ABC%' - IMA01欄位中只要有'ABC'字串的資料(不管在IMA01中的那裡).

不好意思我沒說清楚,3個資料表只是舉例,實際上是有上百甚至上千個資料表
而且每個資料表都有非常多個欄位
假設用傳統的欄位 LIKE '%要的資料%'
就會用A01,A02,B01,B02,B03,B04,C01,C02,C03通通都輸入LIKE
所以我想找的是有沒有方式能夠搜尋全部欄位裡的資料

ccchiou iT邦新手 5 級 ‧ 2018-03-26 17:07:54 檢舉

在where裏面,把文字欄接在一起再用like。
聽起來像是必須用script產生查詢命令,
你會用Oracle的dictionary嗎?

0
Arsene
iT邦新手 5 級 ‧ 2018-04-10 09:51:01

"實際上是有上百甚至上千個資料表, 而且每個資料表都有非常多個欄位"
如果是這樣的狀況, 我個人建議是
(1).要從前端程式下手, 由操作流程先找出您要的資料可能在那一些表格中,
(2).另外, 可以由商品代號的欄位名稱, 大概找出可能的表格 (除非定義欄名時沒有定義為有意義的欄名), 比如它可能叫 PART_NO, 如下:

select table_name from all_tab_columns where column_name like '%PART%NO%'

您可以透過這個方式縮小可能的表格與欄位範圍

我要發表回答

立即登入回答