Oracle PLSQL-具有API调用的存储过程无效
我有以下存储过程,执行API调用,然后将响应作为Clob插入目标表中: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
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开发将非常痛苦。