我希望能够仅使用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上。
谢谢!
P.S。 - 我不需要验证一个简单的sql select,它需要是一个PL / SQL代码块。
答案 0 :(得分:1)
可能将您的代码放在过程而不是匿名块中。
CREATE OR REPLACE PROCEDURE p1 AS
BEGIN
package1.get_wordlist_keywords_PG;
package1.get_wordlist_keyword_cat_PG;
END;
/
show errors;
执行后,可能会成功创建或不成功创建过程。虽然程序创建成功,但程序中的代码 没有执行。
答案 1 :(得分:1)
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”
Clunky,但有效!