0

我需要检索游标内的 SELECT COUNT(*) 语句中的行数(在 Oracle 中)。

以下代码应该清楚地解释它:

PROCEDURE Save(CF_CURSOR OUT "VPA"."CF_#Runtime".CF_CURSOR_TYPE) AS
    V_CF_CURSOR "VPA"."CF_#Runtime".CF_CURSOR_TYPE;
    CF_ROWCOUNT NUMBER;
    BEGIN
        OPEN V_CF_CURSOR FOR
        SELECT COUNT(*) INTO CF_ROWCOUNT FROM (
            SELECT * FROM "VPA"."Employee" -- returns 1 row
        ) WHERE ROWNUM <= 1;
        IF(CF_ROWCOUNT = 0) THEN
            -- DO SOMETHING BUT NEVER GOES HERE
        END IF;
        COMMIT;
    CF_CURSOR := V_CF_CURSOR;
    END;

在这里,从未设置 CF_ROWCOUNT 的值。如果我删除光标,一切都会按预期工作。我曾尝试使用 SQL%ROWCOUNT,但它也不起作用。而且,我无法删除光标...

提前致谢!

4

1 回答 1

2

您是否尝试过打开游标 - 它执行 COUNT(*),然后将其提取到 CF_ROWCOUNT 变量中,而不是在 ref-cursor 语句中将其作为 INTO 执行。

例如:

OPEN V_CF_CURSOR FOR SELECT COUNT(*) FROM "VPA"."Employee"; -- returns 1 row
FETCH V_CF_CURSOR INTO CF_ROWCOUNT;
于 2013-02-27T09:02:11.633 回答