Sql 在Oracle12c中,将JSON用于lenth的问题JSON_值超过11000个字符
我正在Oracle 12c上运行以下代码:Sql 在Oracle12c中,将JSON用于lenth的问题JSON_值超过11000个字符,sql,json,oracle,plsql,oracle12c,Sql,Json,Oracle,Plsql,Oracle12c,我正在Oracle 12c上运行以下代码: DECLARE l_json clob; l_var varchar2(90); l_query clob; mypath clob; l_path_value varchar2(100); BEGIN SELECT json_column into l_json from my_table; SELECT path_column into l_path_value
DECLARE
l_json clob;
l_var varchar2(90);
l_query clob;
mypath clob;
l_path_value varchar2(100);
BEGIN
SELECT json_column into l_json from my_table;
SELECT path_column into l_path_value from my_table; -- this returns 'watchers'
mypath := '$.second."'||l_path_value||'"'; -- $.second."watchers"
l_query := 'select json_value('''||l_json||''', '''||mypath||''' ERROR ON ERROR) from dual';
execute Immediate l_query into l_var;
DBMS_OUTPUT.PUT_LINE('var: '||l_var);
END;
运行此命令后,我得到的结果是:错误报告-
ORA-40441:JSON语法错误
ORA-06512:在第12行
4044100000-“JSON语法错误”
*原因:提供的JavaScript对象表示法(JSON)数据无效
无法分析语法和语法。
*操作:提供具有正确语法的JSON数据。
我期望的结果是:
变量:0 所以,传递的JSON的长度有问题吗 我的json看起来像:
{
"first": {
"private": false,
"html_url": "https://github.com/mralexgray/Alfred-Google-Translate",
"description": "Extension for Alfred that will do a Google translate for you",
"fork": true,
"url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate",
"forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks",
"keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams",
"hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks",
"issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}",
"events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events",
"assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}",
"branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}",
"tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags",
"blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}",
"languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages",
"stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers",
"contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors",
"subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers",
"subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription",
"commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}",
"compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges",
"archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads",
"issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}",
"pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}",
"milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}",
"notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}",
"releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}",
"deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments",
"created_at": "2013-06-04T10:45:10Z",
"updated_at": "2013-06-04T10:45:10Z",
"pushed_at": "2013-01-12T19:39:03Z",
"git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git",
"ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git",
"clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git",
"svn_url": "https://github.com/mralexgray/Alfred-Google-Translate",
"homepage": null,
"size": 103,
"stargazers_count": 0,
"watchers_count": 0,
"language": "Shell",
"has_issues": false,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 0,
"mirror_url": null,
"open_issues_count": 0,
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "master"
},
"second": {
"private": false,
"html_url": "https://github.com/mralexgray/Alfred-Google-Translate",
"description": "Extension for Alfred that will do a Google translate for you",
"fork": true,
"url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate",
"forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks",
"keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams",
"hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks",
"issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}",
"events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events",
"assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}",
"branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}",
"tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags",
"blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}",
"languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages",
"stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers",
"contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors",
"subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers",
"subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription",
"commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}",
"compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges",
"archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads",
"issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}",
"pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}",
"milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}",
"notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}",
"releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}",
"deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments",
"created_at": "2013-06-04T10:45:10Z",
"updated_at": "2013-06-04T10:45:10Z",
"pushed_at": "2013-01-12T19:39:03Z",
"git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git",
"ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git",
"clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git",
"svn_url": "https://github.com/mralexgray/Alfred-Google-Translate",
"homepage": null,
"size": 103,
"stargazers_count": 0,
"watchers_count": 0,
"language": "Shell",
"has_issues": false,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 0,
"mirror_url": null,
"open_issues_count": 0,
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "master"
}
}
如果您的varchar2(90)对于返回值来说太小,它可能会返回null。请参阅以获取参考。我不确定它是否有帮助-在您展示的示例中,它没有任何区别,我也不确定不同值中的任何控件或多字节字符是否会导致问题-但我会绑定JSON值,而不是隐式转换为字符串并返回:
l_query := 'select json_value(:json, '''||mypath||''' ERROR ON ERROR) from dual';
execute Immediate l_query into l_var using l_json;
看起来您展示了一个虚构的示例,这可能没有什么帮助。如果看不到您真正的JSON和路径——或者至少是我们可以用来重现问题的东西——一种可能的解释是输入错误,或者字符混淆,或者结构中的一个小错误。或者确实是JoshMaag所建议的,但您的示例中没有显示。@AlexPoole,我已经更新了真正的JSON并更新了JSON_值查询。我得到一个异常,JSON语法不正确,但我已经验证了JSON语法。这是正确的。是否因为json的长度而存在问题?请提供帮助。您所显示的内容,包括CLOB文本和表中的CLOB列。我猜您有一个控制字符或其他我们在实际表值中看不到的东西。(顺便问一下,你对该列有
是json
检查约束吗?@AlexPoole,是的,我对该列有是json
约束。那么你存储的内容应该已经有效了。我确信大小实际上不是一个问题,但是您现在的示例少于10000个字符-那么您是否实际得到了具有该精确值的错误?您的真实数据中是否有控制字符或多字节字符?我已经用真实JSON和错误跟踪更新了这个问题。请查收。