1

我有一个要求——我需要读取一个表(表名作为 SP 的输入参数提供),将结果存储在临时表中,然后将读取表的计数存储到变量中。请告知如何实现这一点。我已经能够使用动态查询读取表及其计数,但无法将结果放入临时表/变量中。“Select”和“Into”子句似乎不适用于“Execute Immediate”。谢谢。

4

1 回答 1

1

我不太清楚到底要问什么,但您应该能够以下列方式执行 SELECT 语句:

CREATE PROCEDURE p1(IN tablename VARCHAR) AS
BEGIN
   execute immediate 'SELECT * FROM ' || :tablename;
END;

然后以下语句创建一个表并调用该过程来检索结果:

create table T (i integer);
insert into T values (123);

以下将产生一个结果集,其中一行/列的值为 123:

CALL p1('T')

请注意,对于这种类型的功能,您需要非常小心,不要让任何用户提供的输入直接提供给使用 EXECUTE IMMEDIATE 的过程,以避免 SQL 注入攻击的可能性。

于 2014-03-07T16:55:41.263 回答