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

时间:2019-01-29 16:04:09

标签: oracle plsql dynamic-sql

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

如何立即执行此PL / SQL?

查询字符串 ='执行立即选择....';

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

结果变为:Execute immediate 'Execute immediate select ....;';

你知道我该怎么做吗?

1 个答案:

答案 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;

我从来没有遇到过这样的需要。