2008-10-23 46 views
4

Oracle Forms10g提供了一種將Oracle Forms模塊(從Oracle Forms Builder使用的二進制格式(.FMB))轉換爲文本格式(.FMT)的工具。如何讀取Oracle Forms .FMT文件中的PL/SQL代碼?

例如,如果您創建一個名爲mymodule.fmb與Oracle模塊形成生成器,然後在命令行中調用

frmcmp module=mymodule.fmb script=yes batch=yes logon=no 

,甲骨文形式轉換實用程序將創建一個名爲MyModule的文件.fmt來自文件mymodule.fmb。這個文本文件應該是人類可讀的,除了編寫了觸發器和程序單元的PL/SQL代碼之外。

例如,這是一個.FMT文件與編纂的PL/SQL代碼塊片段

DEFINE F50P 
BEGIN 
    PP = 10 
    PI = 3 
    PN = 464 
    PL = 1138 
    PV = (BLONG) 
<<" 
00000049 00800000 00440000 00000000 00000031 0000000d 00000002 a0011519 
00002420 0000045e 001f0000 00165030 5f32335f 4f43545f 32303038 31365f33 
375f3039 00000006 42454749 4e0a0000 0042676f 5f626c6f 636b2820 27504149 
53455327 20293b0a 69662066 6f726d5f 73756363 65737320 7468656e 0a096578 
65637574 655f7175 6572793b 0a656e64 2069663b 00000005 0a454e44 3b000000 
1d574845 4e2d4e45 572d464f 524d2d49 4e535441 4e434520 28466f72 6d290000 

你有沒有嘗試過這種類型的文件進行解碼,才能夠提取出PL /表單的SQL代碼?

能夠在許多.FMT文件的PL/SQL代碼中搜索字符串將非常有用,而不是使用Oracle Forms Builder手動打開每個相應的.FMB文件,並搜索字符串在他們每一個。

謝謝!

+0

早在表格4.5(返回時,「開發者2000」是一個時髦的未來派名)的PL/SQL代碼是在FMT文件中的文本 - 所以你可以搜索代碼 - 其實你也可以找到它的FMB文件。也許甲骨文故意混淆它呢? – hamishmcn 2008-10-23 15:54:42

+0

我錯了,字節的字符只是十六進制值(見下面我的職務) – hamishmcn 2008-10-23 19:39:23

+0

如果你正在做的是搜索文本,你應該可以到grep二進制文件就好了。我一直使用python和regex來發現哪些表單會受到給定存儲過程的影響。 – kurosch 2008-10-24 21:14:20

回答

5

與API一起,請注意,如果您在此流程的開始階段工作,那麼生成XML版本可能比FMT版本更好。 FMT是爲保持向後兼容性而保留的較舊格式,最近發佈的Forms - > Oracle APEX轉換器等工具將需要XML。這也更容易閱讀。

在「Forms 10g release 1」(9.0.4)中,XML轉換器是一個單獨的命令行程序。forms2xml。我想這是仍然如此10.1

此外,該XML更易於閱讀和理解。

0

根據this頁筆者有一個Perl腳本,以十六進制轉換回ASCII文本(他說要送他的電子郵件,他會送吧)

1

的字節字符只是十六進制值。例如:以第4行,並把它分爲以下Python代碼:

[chr(x) for x in [0x53,0x45,0x53,0x27 ,0x20,0x29,0x3b,0x0a ,0x69,0x66,0x20,0x66 ,0x6f,0x72,0x6d,0x5f ,0x73,0x75,0x63,0x63 ,0x65,0x73,0x73,0x20 ,0x74,0x68,0x65,0x6e ,0x0a,0x09,0x65,0x78]] 

給出以下輸出:

['S', 'E', 'S', "'", ' ', ')', ';', '\n', 'i', 'f', ' ', 'f', 'o', 'r', 'm', '_', 's', 'u', 'c', 'c', 'e', 's', 's', ' ', 't', 'h', 'e', 'n', '\n', '\t', 'e', 'x'] 

其是可識別的形式PL/SQL。所以看起來創建一個腳本不需要太多的工作,該腳本可以獲取FMT文件的目錄並生成可搜索文本的相應文件。
玩得開心!

1

Oracle Forms 9i及更高版本有一個編程API,允許您完全按照您的描述進行操作。您需要查看Forms文檔才能執行此操作,但這可能比嘗試提取二進制字符串更快。

如果你願意支付現有的工具,使用以下命令:

http://www.orcl-toolbox.com/

他們formsAPI和FormsTools讓你做拔牙,差異,變更和更新表單。

相關問題