执行立即执行立即执行的pl/sql

Moh*_*shi 0 oracle plsql dynamic-sql

我有一个执行立即的查询字符串.

我怎么能执行立即这个PL/SQL?

query string ='执行立即选择....';

想要这样做: Execute immediate 'query string';

这变成了: Execute immediate 'Execute immediate select ....;';

你知道我怎么能这样做?

Mat*_*eak 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;
Run Code Online (Sandbox Code Playgroud)

这基本上是一回事,但是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;
Run Code Online (Sandbox Code Playgroud)

我从来没有遇到过这样做的必要.