首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表-> ORA-00942

表-> ORA-00942
EN

Stack Overflow用户
提问于 2022-07-19 13:37:51
回答 1查看 36关注 0票数 0

我有一个json字符串参数。我想要创建一个函数,它返回一个带有数据的表。

我创建了一个类型:

代码语言:javascript
复制
CREATE OR REPLACE TYPE AttachmentResponseType AS OBJECT (
 savePath              VARCHAR (255) ,
 originalFileName      VARCHAR (255) ,
 fileSize              number(20) );

我创建了一个列表

代码语言:javascript
复制
CREATE OR REPLACE TYPE JSON_DOC_JUKEBOX_TBL IS TABLE OF AttachmentResponseType;

和一个函数

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION JSONSTRING_TO_JB_TYPE (p_json in varchar2) return JSON_DOC_JUKEBOX_TBL as
resTBL JSON_DOC_JUKEBOX_TBL;
JSON_VAR varchar2(3000);

begin
JSON_VAR := p_json;
with x as (SELECT t.savePath, t.originalFileName, t.fileSize FROM JSON_TABLE(
                JSON_VAR,
                '$' 
                COLUMNS(
                    NESTED '$.AttachmentResponseType[*]'COLUMNS (
                    savePath varchar2(255),
                    originalFileName varchar2(255),
                    fileSize number(20)
                    )
                )
            ) as t) select AttachmentResponseType(x.savePath, x.originalFileName, x.fileSize) bulk collect INTO resTBL from x;
            commit;
    return resTBL;
end;

我试着测试它,我有一个具有相同列的tst表。

代码语言:javascript
复制
    declare
    test JSON_DOC_JUKEBOX_TBL;
begin
    test := JSONSTRING_TO_JB_TYPE('{"AttachmentResponseType" : [{
             "savePath" : "dsadsad/dsadas.xaxaxa.pfg",
             "originalFileName" : "xaxaxa.pfg",
             "fileSize" : "12"},
             {
             "savePath" : "dsadsad/1111g",
             "originalFileName" : "1.pfg",
             "fileSize" : "1112"}]}');
             
    INSERT INTO tst
    (savePath, originalFileName, fileSize) values
    (SELECT savePath, originalFileName, fileSize
    FROM test);
    commit;
end;

测试突出显示为“未定义表”,当我运行时,例外情况是:ORA-00942。

我做错了什么吗?我应该以某种方式初始化“测试”表吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-20 15:40:10

与其使用多个TYPE和一个FUNCTION来插入记录,不如直接使用INSERT INTO...SELECT...

见下面的例子:

代码语言:javascript
复制
CREATE TABLE tst
(
    savePath            VARCHAR (255),
    originalFileName    VARCHAR (255),
    fileSize            NUMBER (20)
);

INSERT INTO tst (savepath, originalfilename, filesize)
    SELECT savepath, originalfilename, filesize
      FROM JSON_TABLE (
               '{"AttachmentResponseType" : [{
             "savePath" : "dsadsad/dsadas.xaxaxa.pfg",
             "originalFileName" : "xaxaxa.pfg",
             "fileSize" : "12"},
             {
             "savePath" : "dsadsad/1111g",
             "originalFileName" : "1.pfg",
             "fileSize" : "1112"}]}',
               '$'
               COLUMNS (
                   NESTED '$.AttachmentResponseType[*]'
                       COLUMNS (savePath VARCHAR2 (255),
                                originalFileName VARCHAR2 (255),
                                fileSize NUMBER (20))));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73038001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档