无法使用v $ sesstat编译函数

我有以下匿名阻止代码:

declare
    v_rezult  v$sesstat.value%TYPE;
begin
    select value into v_rezult from v$sesstat where rownum < 2;
    dbms_output.put_line (v_rezult);
end;

...效果很好。

我想将其转换为函数,例如:

create or replace function func_test return varchar2 is
v_rezult  v$sesstat.value%TYPE;
begin
    select value into v_rezult from v$sesstat where rownum < 2;
    return v_rezult;
end;

...但是,在编译时,出现以下错误:

  

PLS-00201:必须声明标识符“ V $ SESSTAT”

有人可以解释为什么吗,请问如何将这个视图的用法添加到函数中?

谢谢,Mikcutu。

wb214427411 回答:无法使用v $ sesstat编译函数

  1. 如果未在SYS模式中创建函数,则必须完全限定该函数。我会避免对SYS或SYSTEM进行更改,我的建议是使用其他架构。
  2. V $ SESSTAT是SYS.V_ $ SESSTAT的同义词,请使用SYS.V_ $ SESSTAT
  3. 在SYS.V_ $ SESSTAT上选择授予该函数的所有者。
  4. 使用适当的返回类型
  

-假设您有一个Oracle帐户“ ADMIN”

GRANT EXECUTE ON sys.v_$sesstat TO admin;

CREATE OR REPLACE FUNCTION admin.func_test
    RETURN SYS.v_$sesstat.VALUE%TYPE IS
    v_rezult   SYS.v_$sesstat.VALUE%TYPE;
BEGIN
    SELECT VALUE
      INTO v_rezult
      FROM sys.v_$sesstat
     WHERE ROWNUM < 2;

    RETURN v_rezult;
END;
本文链接:https://www.f2er.com/3079763.html

大家都在问