oracle如何在过程/包中找到begin的行号
我想在每个过程、函数和打包的过程中添加一些代码,我有数千个过程、包等,因此手动完成这项工作需要很多周的时间 我可以搜索所有源代码,但在我编写自己的代码之前,是否有人有任何分析代码来查找“开始”的行号,因为我可能需要忽略子例程或匿名块 例如来自用户来源oracle如何在过程/包中找到begin的行号,oracle,stored-procedures,plsql,oracle11g,Oracle,Stored Procedures,Plsql,Oracle11g,我想在每个过程、函数和打包的过程中添加一些代码,我有数千个过程、包等,因此手动完成这项工作需要很多周的时间 我可以搜索所有源代码,但在我编写自己的代码之前,是否有人有任何分析代码来查找“开始”的行号,因为我可能需要忽略子例程或匿名块 例如来自用户来源 package body my_pck is procedure proc1 is v_var varchar2(10); procedure sub_proc is begin some co
package body my_pck is
procedure proc1
is
v_var varchar2(10);
procedure sub_proc
is
begin
some code ....
end;
begin
< I want to insert code here>
some code ....
begin
anon block ....
end;
end;
procedure proc2
is
v_var varchar2(10);
procedure sub_proc_something_else
is
begin
some code ....
end;
procedure sub_proc_another
is
begin
some code ....
end;
begin
< I want to insert code here as well>
some code ....
end;
end;
包体我的pck是
程序程序1
是
v_var varchar2(10);
程序子程序
是
开始
一些代码。。。。
终止
开始
<我想在这里插入代码>
一些代码。。。。
开始
安侬街区。。。。
终止
终止
程序程序2
是
v_var varchar2(10);
程序子程序或其他程序
是
开始
一些代码。。。。
终止
程序子程序
是
开始
一些代码。。。。
终止
开始
<我也想在这里插入代码>
一些代码。。。。
终止
终止
因此,我认为我需要一个例程来匹配开始/结束,以找到在哪里添加代码
谢谢
Robert使用$$PLSQL\u行。另请参见$$PLSQL\U单元
BEGIN
DBMS_OUTPUT.PUT_LINE ( $$PLSQL_UNIT || '.' || $$PLSQL_LINE || ': hello ' );
END;
/
我认为这很难(但并非不可能)做到。首先,您需要从数据库中获取包。我有一些代码可以做到这一点:
DECLARE
package_name user_source.name%type;
last_package_name user_source.name%type;
package_body CLOB;
BEGIN
FOR package_cur IN
( SELECT * FROM user_source WHERE type = 'PACKAGE BODY' ORDER BY name, line
)
LOOP
package_name := package_cur.name;
IF last_package_name = package_name OR last_package_name IS NULL THEN
package_body := package_body || package_cur.text;
ELSE
--=======================================================
-- whole package is now in package_body and can be altered
--=======================================================
insert into tmp_table values (package_body);
-- move to next package
package_body := package_cur.text;
END IF;
last_package_name := package_name;
END LOOP;
-- processing very last package
insert into tmp_table values (package_body);
END;
下一个障碍是,代码可以用各种方式概括,据我所知,整个包可以用一行代码编写。您必须找到一种或另一种方法,首先从包中提取所有过程,然后绑定相应的begin关键字。您肯定需要一个解析器来完成此任务。我为创建了一个plsql解析器,如果您愿意,可以使用它。它不是一个成熟的解析器,但足够聪明,能够理解plsql代码的结构 从github获取vorax4项目
cd C:\Projects
git clone https://github.com/talek/vorax4
gem install vorax
编写一个简单的ruby代码来处理您的场景:
$LOAD\u路径谢谢,但这取决于手动将其添加到代码中。。。我想把它自动化。。。我应该补充说,我将把源代码提取到一个文本文件中,添加代码行,然后重新编译回数据库。。。。我现在正在编写一个例程来完成这项工作,我只是在完善拥有子例程的逻辑,而不是把我的代码放在那里!我什么时候应该投反对票?每当你遇到一篇极其草率、不费力气的帖子,或者一个答案明显地、甚至可能是危险地不正确时,请使用你的反对票。