Oracle PLSQL-具有API调用的存储过程无效

Oracle PLSQL-具有API调用的存储过程无效,oracle,plsql,Oracle,Plsql,我有以下存储过程,执行API调用,然后将响应作为Clob插入目标表中: create or replace procedure api_call( time_id in varchar2, repository in varchar2, api_query in varchar2) as date_from varchar2 := to_char(to_date(time_id, 'y

我有以下存储过程,执行API调用,然后将响应作为Clob插入目标表中:

create or replace procedure api_call(
       time_id       in varchar2,
       repository    in varchar2,
       api_query     in varchar2)
       as
       
       date_from varchar2 := to_char(to_date(time_id, 'yyyymmdd', 'nls_date_language = English'));
       date_to varchar2 := to_char(to_date(time_id, 'yyyymmdd', 'nls_date_language = English') + 1);
       
       req                utl_http.req;
       res                utl_http.resp;
       response_json      clob;
       url varchar2(2000) := 'url/'||repository||'/query';
       
       query_string varchar2(4000) := '{"queryString":"'||api_query||'","start":'||date_from||',"end":'||date_to||', "isLive":false}';

begin
       DBMS_LOB.createtemporary(response_json, false);
       
       req := utl_http.begin_request(url, 'POST', ' HTTP/1.1');
       utl_http.set_header(req, 'Authorization: Bearer', 'someAPItoken');
       utl_http.set_header(req, 'content-type', 'application/json');
       utl_http.set_header(req, 'Accept', 'application/json');
       
       utl_http.write_text(req, query_string);
       
       res := utl_http.get_response(req);
       
       begin
         loop
           utl_http.read_text(res);
           DBMS_LOB.writeappend(response_json);
         end loop;
       exception
         when utl_http.end_of_body then
           utl_http.end_response(res);
         end;
         
         insert into http_response_table (time_id, repository, json_data)
         values (time_id, repository, response_json);
         
         DBMS_LOB.freetemporary(reponse_json);
         
       exception
         when others then
           utl_http.end_response(res);
           DBMS_LOB.freetemporary(reponse_json);
           raise;

end api_call;
出于某种原因,当尝试测试该过程时,它会声明该对象无效。尽管它创建存储过程时没有任何错误消息


知道存储过程中有什么问题吗?格式或语法方面的问题?

您的代码有很多问题。创建过程时,Oracle将告诉您是否存在“警告:创建的过程存在编译错误”问题 因此,您可以通过执行 SQL>显示错误

然后你一个一个地纠正它们。例如,在您的代码中,有一个名为response_json的变量,您将其称为response_json或response_json。因此,纠正这一点。然后,您将得到一个关于dbms_lob.writeappend没有所需参数的错误,请更正该错误,并查看是否还有剩余参数,…。

将代码放入a中,然后运行:

从用户错误中选择*;
给出了错误:

名称 类型 序列 线 位置 正文 属性 报文号 API_调用 程序 1. 7. 18 PLS-00215:字符串长度限制必须在范围(1..32767)内 错误 215 API_调用 程序 2. 8. 16 PLS-00215:字符串长度限制必须在范围(1..32767)内 错误 215 API_调用 程序 3. 31 12 PLS-00306:调用“读取文本”时参数的数量或类型错误 错误 306 API_调用 程序 4. 31 12 PL/SQL:忽略语句 错误 0 API_调用 程序 5. 32 12 PLS-00306:调用“WRITEAPPEND”时参数的数量或类型错误 错误 306 API_调用 程序 6. 32 12 PL/SQL:忽略语句 错误 0 API_调用 程序 7. 42 33 PLS-00201:必须声明标识符“Response\u JSON” 错误 201 API_调用 程序 8. 42 10 PL/SQL:忽略语句 错误 0 API_调用 程序 9 47 35 PLS-00201:必须声明标识符“Response\u JSON” 错误 201 API_调用 程序 10 47 12 PL/SQL:忽略语句 错误 0
请检查
select*from user\u errors
中的错误,返回为空
all\u errors
dba\u errors
(如果您可以看到),以防您不拥有它?请编辑您的问题,以显示您如何调用它以及您得到的确切输出。谢谢,它显示在所有错误中!您使用的是什么开发工具?您需要熟悉它如何报告编译错误,否则PL/SQL开发将非常痛苦。