我有一个立即执行的查询字符串。
如何立即执行此PL / SQL?
查询字符串 ='执行立即选择....';
想要这样做:Execute immediate 'query string';
结果变为:Execute immediate 'Execute immediate select ....;';
你知道我该怎么做吗?
答案 0 :(得分:5)
无需评论它是正常还是明智:是的,我相信您可以做到。也就是说,我从未见过关于EXECUTE IMMEDIATE
的任何文章表明它不是可重入的。另外,如果您尝试使用,它也可以工作。
这是一个简单的,典型的EXECUTE IMMEDIATE
呼叫:
DECLARE
l_count NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) INTO :l_count FROM DBA_OBJECTS WHERE ROWNUM <= 100' INTO l_count;
DBMS_OUTPUT.PUT_LINE ('l_count = ' || l_count);
END;
这里基本上是同一件事,但是EXECUTE IMMEDIATE
调用嵌套了两个级别:
DECLARE
l_outer_count NUMBER;
BEGIN
EXECUTE IMMEDIATE q'!
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) INTO :x FROM DBA_OBJECTS WHERE ROWNUM <= 100' INTO :l_outer_count;
END;
!'
USING IN OUT l_outer_count;
DBMS_OUTPUT.PUT_LINE('l_outer_count = ' || l_outer_count);
END;
我从来没有遇到过这样的需要。