下面是我在 Spring Boot 中部署为 Web 服务的 Java 代码。我正在尝试调用 rmsadmin 模式中部署在本地主机中的存储过程
public String saveUserDetails()
{
String return_message = new String();
String url = "jdbc:postgresql://127.0.0.1:5432/rms";
String user = "postgres";
String password = "postgres";
try
{
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(url, user, password);
CallableStatement callableStatement = connection.prepareCall("{call rmsadmin.insert_user_details(?, ?)}");
// Set the JSON parameter
String jsonParam = "{\"employee_id\": \"2\", \"user_name\": \"John\", \"user_email\":\"[email protected]\"}";
callableStatement.setString(1, jsonParam);
callableStatement.registerOutParameter(2, Types.VARCHAR);
callableStatement.execute();
String status = callableStatement.getString(2);
// Retrieve the status OUT parameter
return_message = "Status: " + status;
}
catch (SQLException e) {
return_message = "Error calling stored procedure: " + e.getMessage();
}
catch (ClassNotFoundException e)
{
return_message = "Error calling stored procedure: " + e.getMessage();
}
return return_message;
}
下面是我在 PostgreSQL plpgsql 中的存储过程。它处理 JSON 输入并将值插入表中并将输出参数设置为成功。
CREATE OR REPLACE PROCEDURE rmsadmin.insert_user_details
(
IN json_data VARCHAR
,OUT status VARCHAR
)
AS
$$
DECLARE
json_obj JSONB;
employee_id_val TEXT;
user_name_val TEXT;
user_email_val TEXT;
BEGIN
\-- Parse the JSON string into a JSON object
json_obj := json_data::JSONB;
-- Extract the desired fields from the JSON object
employee_id_val := json_obj->>'employee_id';
user_name_val := json_obj->>'user_name';
user_email_val := json_obj->>'user_email';
-- Insert the extracted fields into a table
INSERT INTO rmsadmin."User" (employee_id, user_name, user_email) VALUES (employee_id_val, user_name_val, user_email_val);
-- Set status to indicate success
status := 'Success';
EXCEPTION
WHEN others THEN
\-- Set status to indicate failure
status := 'Error: ' || SQLERRM;
END;
$$ LANGUAGE plpgsql;
我收到以下错误,我无法理解问题所在。
调用存储过程时出错:
错误:rmsadmin.insert_user_details(字符变化)是一个过程提示:要调用过程,请使用 CALL。位置:15
请帮我解决这个问题。我已经浪费了几个小时来解决这个问题。
我尝试将数据插入表中并通过浏览器查看Web服务调用的成功消息
您的架构/数据库是
rms
,这是您应该在前缀中使用的名称。存储过程不应有前缀或使用
"{call rms.insert_user_details(?, ?)}"
CREATE OR REPLACE PROCEDURE insert_user_details
(
IN json_data VARCHAR,
OUT status VARCHAR
)