不执行的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代码验证[重复]的主要内容,如果未能解决你的问题,请参考以下文章