在 PL/SQL 中出现错误“PLS-00201:必须声明标识符‘JSON_VALUE’”

Posted

技术标签:

【中文标题】在 PL/SQL 中出现错误“PLS-00201:必须声明标识符‘JSON_VALUE’”【英文标题】:Getting Error "PLS-00201: identifier 'JSON_VALUE' must be declared" in PL/SQL 【发布时间】:2019-07-02 09:41:39 【问题描述】:

我正在尝试从存储在表中的 Json 文件中提取数据。但我无法在 PL/SQL 中执行包 JSON_VALUE。

以下查询工作正常:

SELECT JSON_VALUE('a:100', '$.a' ) AS value
  FROM DUAL;

但是下面的 PL/SQL 块不起作用:

declare 
  SQL_QUERY_RES varchar2(300);
  cursor c1 is
  SELECT 1 from DUAL;
begin
   for i in c1 
   loop
     SQL_QUERY_RES :=  JSON_VALUE('a:100', '$.a' );
     DBMS_OUTPUT.PUT_LINE ( SQL_QUERY_RES );    
   end loop;
   COMMIT;
end;
/

它给出 PLS-00201: identifier 'JSON_VALUE' must be declared 错误。

【问题讨论】:

您的数据库版本是 12c 吗?谢谢@a_horse_with_no_name。适用于 12.2 但不适用于 12.1。如果您的版本是 12.1,请考虑在 Tejash 的答案中的查询中使用。 在 12.2 和 DbFiddle 上为我工作:dbfiddle.uk/… 谢谢@BarbarosÖzhan 我的数据库版本是 12.1 【参考方案1】:

试试这个

DECLARE
    SQL_QUERY_RES   VARCHAR2(300);
    CURSOR C1 IS
    SELECT
        1
    FROM
        DUAL;

BEGIN
    FOR I IN C1 LOOP
        -- USE THIS
        SELECT
            JSON_VALUE('a:100', '$.a')
        INTO SQL_QUERY_RES
        FROM
            DUAL;

        DBMS_OUTPUT.PUT_LINE(SQL_QUERY_RES);
    END LOOP;

    COMMIT;
END;
/

它对我有用。

对于 DB 版本 12.1,PL/SQL 赋值 SQL_QUERY_RES := JSON_VALUE('a:100', '$.a' ); 不起作用,您需要在 select 语句中使用,但对于 12.2 有效。

【讨论】:

以上是关于在 PL/SQL 中出现错误“PLS-00201:必须声明标识符‘JSON_VALUE’”的主要内容,如果未能解决你的问题,请参考以下文章

pl/sql 必须声明 PLS-00201 标识符

PLS-00201:标识符必须在过程中声明

PL/SQL 函数中的 XmlRoot、XmlElement、InsertChildXml 给出 PLS-00201 必须声明标识符

ORA-06550:第 1 行,第 7 列:PLS-00201:必须声明标识符“PAYMENT_UPDATE” ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

接受用户输入并设置分配给变量 PL/SQL

PLS-00201:必须声明标识符“TYPE”