• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Решено Каким образом правильно получить данные от хранимой PL/SQL процедуры на JSP (JSTL)?

D

drno-reg

Здравствуйте.

Вчера столкнулся с такой задачей.
В Oracle есть процедура, которой на вход подается определенное значение и она возвращает результат в виде SYS_REFCURSOR.

листинг PL-SQL блока

Код:
DECLARE
  v_ref  SYS_REFCURSOR;
  v_instance admin.newtable.name%TYPE;
  v_all number;
  v_notin number;
  v_prt varchar2(20) default 'Итого' ;
BEGIN
    REPORTS.inwork(v_prt, v_ref);
 
  LOOP
    FETCH v_ref
    INTO  v_instance, v_all, v_notin;
    EXIT WHEN v_ref%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_instance||'|'||v_all||'|'||v_notin);
  END LOOP;
  CLOSE v_ref;
END;

результат исполнения PL-SQL блока следующий

SUBARU|24|9
AUDI|10|2
LADA|0|0
Итого|34|11

хочу эти данные отобразить в WEB на JSP (JSTL) блоком
раньше пользовался таким методом

Код:
<c:set var="SCRIPT">
select sysdate as VALUE from dual
</c:set>

<sql:query var="SCRIPT" dataSource="jdbc/DBORACLE">
   ${SCRIPT}
</sql:query>

<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>

<c:set var="json_text" scope="application">
<json:object>
<json:array name="FROM_DBORACLE" prettyPrint="false">
<c:forEach var="row" items="${SCRIPT.rows}">
<json:object>
   <json:property name="VALUE" value="${row.VALUE}"/>
</json:object>
</c:forEach>
</json:array>

</json:object>
</c:set>

Результат SQL в JSON: ${json_text}

Прошу помочь примером вывода информации из хранимой процедуры Oracle (желательно с SYS_REFCURSOR).
 
  • Нравится
Реакции: Сергей Попов
D

drno-reg

найдено решение на java не JSTL

Код:
Connection conn = null;
CallableStatement stmt = null;
ResultSet rset = null;

String SOME_NAME = "{call REPORTS.mi_inwork(?,?)}";

  try {
        conn = DriverManager.getConnection(Connection_URL,UserName, Password);

            stmt = conn.prepareCall(SOME_NAME);//We have declared this at the very top
        stmt.setString(1, "Итого");//Passing CompanyID here
        stmt.registerOutParameter(2, OracleTypes.CURSOR);//Refcursor selects the row based upon query results provided in Package.
        stmt.execute();
        rset = (ResultSet) stmt.getObject(2);

        while (rset.next()) {
            out.println(rset.getString(1)+" | "+ rset.getString(2)+" | "+ rset.getString(3));
}
} catch (Exception e) {
     //   LOGGER.error("Error extracting ", e);
        out.println( "<h1>exception: "+e.getMessage()+"</h1>" );
} finally {
     //   DBUtils.cleanUp(conn, stmt, rset);
}
 
  • Нравится
Реакции: Сергей Попов
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!