不执行的PL/SQL代码验证[重复]

Posted

技术标签:

【中文标题】不执行的PL/SQL代码验证[重复]【英文标题】:PL/SQL Code Validation without execution [duplicate] 【发布时间】:2016-03-03 20:46:28 【问题描述】:

我希望能够仅使用 PL/SQL 来验证一段代码是否正确。

例如,我在变量中有以下代码,我想对其进行验证:

my_code:='BEGIN
           package1.get_wordlist_keywords_PG;
           package1.get_wordlist_keyword_cat_PG;
          END;
'

我想做这样的事情:

结果:=validate_code(my_code);

结果将是“有效”或“无效”(或带有错误消息等)

我相信这是可能的,因为 Oracle Apex 允许用户输入 PL/SQL 并在保存代码时对其进行验证。

我使用的是 Oracle 12c。

谢谢!

附: - 我不需要验证一个简单的 sql 选择,它需要是一个 PL/SQL 代码块。

【问题讨论】:

【参考方案1】:

可能将您的代码放在一个过程而不是匿名块中。

CREATE OR REPLACE PROCEDURE p1 AS
BEGIN
  package1.get_wordlist_keywords_PG;
  package1.get_wordlist_keyword_cat_PG;
END;
/
show errors;

执行后,过程可能创建成功,也可能创建不成功。虽然过程创建成功,但过程中的代码 没有被执行。

【讨论】:

谢谢 - 把它变成了这个,这让我可以验证我需要什么......【参考方案2】:
CREATE OR REPLACE PROCEDURE VALIDATE_PLSQL 
(
  PLSQL IN VARCHAR2 
, MY_RESULT OUT VARCHAR2 
) AS 
 my_code varchar2(31900);
 validate_code varchar2(32000);
 status varchar2(4000);
BEGIN
  my_code:=PLSQL;
  validate_code:='create or replace procedure testp1 AS '||my_code;

  BEGIN
   status:='PASSED';
   EXECUTE IMMEDIATE validate_code;
  exception 
   when OTHERS then
   status:='FAILED';
  END;

  EXECUTE IMMEDIATE 'drop procedure testp1';

  MY_RESULT:=status;

END VALIDATE_PLSQL;

在“PLSQL”中传入要验证的块,在“MY_RESULT”中获取结果

笨重,但有效!

【讨论】:

以上是关于不执行的PL/SQL代码验证[重复]的主要内容,如果未能解决你的问题,请参考以下文章

pl/sql连接Oracle不管执行啥语句都会重复执行这条语句,永不停止,怎么办呀

为啥这个 PL/SQL 查询不使用 ODP.NET 执行

Oracle PL/SQL 并行执行 [重复]

使用 PL/SQL 执行 perl 脚本

执行动态 PL/SQL 块以执行求和并返回值

PL/SQL 过程和 Toad 执行?