Как использовать вызов jdb c для процедуры postgres с параметром INOUT - PullRequest
0 голосов
/ 06 января 2020

Я не очень люблю Postgres и в последнее время много занимаюсь серфингом из-за некоторых специфических c требований. У меня есть эта специфицированная c процедура

p_user_name character varying, 
p_password character varying, 
p_ip character varying, 
INOUT p_return_id integer, 
INOUT p_message character varying, 
INOUT p_user_id integer, 
INOUT p_name character varying, 
INOUT p_mobile character varying, 
INOUT p_email character varying, 
INOUT p_last_login timestamp without time zone, 
INOUT module_list refcursor, 
INOUT method_list refcursor)
 LANGUAGE plpgsql
AS $procedure$
DECLARE 
VAR_EXST_USER       INT;
VAR_USER_ID         INT;
VAR_NAME            varchar;
VAR_MOBILE          varchar;
VAR_EMAIL           varchar;
VAR_PASS            varchar;
VAR_LAST_LOGIN_TIME timestamp;
VAR_IS_LOGGED_IN    int;
VAR_IS_BLOCKED      int;
VAR_PRIVILEGE       int;
P_OSUSER  VARCHAR(100);
P_PROGRAM VARCHAR(100);
P_MACHINE VARCHAR(100);
P_USERNAME VARCHAR(100);
ipaddr varchar(500);
P_SID  varchar(500);
P_PORT  varchar(500);
P_SQL_ID varchar(500);

BEGIN
 ....         
END;
$procedure$;

. Мне требуется использовать эту процедуру для вызова моего соединения jdb c и использования параметров INOUT. Я называю это следующим образом:

            String encodedPassword = getEncodedPassword(requestJson.getPassword());
            System.out.println("Encoded Password: " + encodedPassword);
            String sql = "{call public.admin_user_login_proc(?,?,?,?,?,?,?,?,?,?,?,?)}";
            System.out.println(sql);
            callableStatement = conn.prepareCall(sql);
            System.out.println("callableStatement : " + callableStatement);
            callableStatement.setString(1, requestJson.getUser_name());
            System.out.println("callableStatement : " + callableStatement);
            callableStatement.setString(2, encodedPassword);
            callableStatement.setString(3, requestJson.getIp_address());
            callableStatement.setInt(4, 0);
            callableStatement.registerOutParameter(4, Types.INTEGER);
            callableStatement.setString(5, null);
            callableStatement.registerOutParameter(5, Types.VARCHAR);
            callableStatement.setInt(6, 0);
            callableStatement.registerOutParameter(6, Types.INTEGER);
            callableStatement.setString(7, null);
            callableStatement.registerOutParameter(7, Types.VARCHAR);
            callableStatement.setString(8, null);
            callableStatement.registerOutParameter(8, Types.VARCHAR);
            callableStatement.setString(9, null);
            callableStatement.registerOutParameter(9, Types.VARCHAR);
            callableStatement.setTimestamp(10, null);
            callableStatement.registerOutParameter(10, Types.TIMESTAMP);
            callableStatement.setObject(11, null);
            callableStatement.registerOutParameter(11, Types.REF);
            callableStatement.setObject(12, null);
            callableStatement.registerOutParameter(12, Types.REF);

, но не работает.

У меня проблема с поиском правильного подхода, и я также не совсем понимаю, как установить параметр для реф курсоров. Пожалуйста, помогите и объясните немного

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...