暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ORDS处理程序定义上的blob到clob

ASKTOM 2021-01-06
386

问题描述

嗨!
我试图发送一个post请求与json:
{
        "id": 12344444,
        "email": "ppppoddddddppp@gmail.com",
        "first_name": "",
        "last_name": "",
        "billing": {
            "first_name": "22222",
            "last_name": "",
            "company": "",
            "address_1": "",
            "address_2": "",
            "city": "",
            "postcode": "",
            "country": "",
            "state": "",
            "email": "",
            "phone": ""
        }
}

我正在尝试使用apex_json提取信息,例如: “在”

我阅读了以下指南:https://oracle-base.com/articles/misc/apex_json-package-generate-and-parse-json-documents-in-oracle#parsing-json
它工作,但不在ORDS处理程序定义内 ....

我正在尝试使用以下代码...但它不是插入数据并返回 “201”:
DECLARE
    l_json_payload clob;  
 l_blob_body    blob := :body;
    l_dest_offset  integer := 1;
    l_src_offset   integer := 1;
    l_lang_context integer := dbms_lob.default_lang_ctx;
    l_warning      PLS_INTEGER := DBMS_LOB.warn_inconvertible_char;
BEGIN  
 if dbms_lob.getlength(l_blob_body) = 0 then
   :status_code := 400; --error 
      :errmsg := 'Json is empty'; 
   return;
 end if;


     dbms_lob.createTemporary(lob_loc => l_json_payload ,cache   => false);

    dbms_lob.converttoclob( dest_lob     => l_json_payload
                           ,src_blob     => l_blob_body
                           ,amount       => dbms_lob.lobmaxsize
                           ,dest_offset  => l_dest_offset
                           ,src_offset   => l_src_offset
                           ,blob_csid    => dbms_lob.default_csid
                           ,lang_context => l_lang_context
                           ,warning      => l_warning); 

APEX_JSON.parse(l_json_payload);

                             INSERT INTO ACCOUNTS
              ( 
                wp_id                           ,
                name                            ,
                email                           ,
                f_name                          ,
                l_name                          ,
                wp_role                         ,
                wp_username                     ,
                woo_is_paying_customer          ,
                woo_billing_first_name           
              ) 
              VALUES 
              ( 
                :id,
                :first_name || ' ' || :last_name,
                :email,
                :first_name,
                :last_name,
                :role,
                :username,
                decode(:is_paying_customer,'false', 'N', 'Y'),
                APEX_JSON.get_varchar2(p_path => 'billing.first_name')
              );

  :status_code := 201; --created 

EXCEPTION 

WHEN OTHERS THEN 
  :status_code := 400; --error 
  :errmsg := SQLERRM; 
END;



更新:
经过测试-问题出在这一行:
l_blob_body    blob := :body;

当我输入它时,它不会将任何内容插入数据库

更新2:
经过测试...
我意识到,这是不可能的结合:
: body和其他绑定值,因此应改用APEX_JSON.get_varchar2 (p_path => 'billing.first_name ')

所以问题就解决了

专家解答

谢谢-我们将在此处发布您的答案


after testing...
I realized that it is not possible to combine:
: body and other bind value, so APEX_JSON.get_varchar2 should be used instead (p_path => 'billing.first_name')

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论