FIREBIRD BLR解码器

时间:2009-12-03 13:48:17

标签: firebird interbase

人。当我相信我是一个天才,元数据是我的知识产权,我开发了一个firebird程序来跟踪单个表上的变化,具有id和时间戳。所以,我做了一个巨大的聪明的举动,删除了这个程序的来源。

有没有人知道BLR解码器,或者我需要建立的解码器?

TIA。

3 个答案:

答案 0 :(得分:4)

Firebird本身的BLR(文本)解码器有很好的BLR(二进制)。您可以使用set blob all(或set blobdisplay all)启用它。你可以从ISQL调用它:

SQL> set term !;
SQL> create procedure p1
CON> as
CON>   declare n integer = 1;
CON> begin
CON>   n = n * 2;
CON> end!
SQL> set term ;!
SQL> 
SQL> set blob all;
SQL> commit;
SQL> 
SQL> select rdb$procedure_blr from rdb$procedures where rdb$procedure_name = 'P1';

RDB$PROCEDURE_BLR 
================= 
             1a:3 
==============================================================================
RDB$PROCEDURE_BLR:  
            blr_version5,
            blr_begin,
               blr_message, 1, 1,0,
                  blr_short, 0,
               blr_begin,
                  blr_declare, 0,0, blr_long, 0,
                  blr_assignment,
                     blr_literal, blr_long, 0, 1,0,0,0,
                     blr_variable, 0,0,
                  blr_stall,
                  blr_label, 0,
                     blr_begin,
                        blr_begin,
                           blr_assignment,
                              blr_multiply,
                                 blr_variable, 0,0,
                                 blr_literal, blr_long, 0, 2,0,0,0,
                              blr_variable, 0,0,
                           blr_end,
                        blr_end,
                  blr_end,
               blr_send, 1,
                  blr_begin,
                     blr_assignment,
                        blr_literal, blr_short, 0, 0,0,
                        blr_parameter, 1, 0,0,
                     blr_end,
               blr_end,
            blr_eoc

==============================================================================

答案 1 :(得分:3)

我见过一个BLR显示工具(在Jason Wharton的IB管理工具中),但它只显示BLR名称,而不是音译回SQL / proc语言。我认为你所寻找的东西不存在。

但你可以get BLR documentation here

答案 2 :(得分:2)

如果您仍然拥有数据库,那么过程源仍然可能存在于某处,但标记为已删除。您可以尝试在十六进制编辑器上打开数据库文件并搜索过程名称。