БД: Поддержка win-1251 в репо для sql/prc/pck

This commit is contained in:
Mikhail Chechnev 2023-09-25 00:26:59 +03:00
parent 4758cf71c8
commit 0251797080
7 changed files with 1573 additions and 1570 deletions

3
.gitattributes vendored Normal file
View File

@ -0,0 +1,3 @@
*.sql working-tree-encoding=cp1251 eol=crlf
*.pck working-tree-encoding=cp1251 eol=crlf
*.prc working-tree-encoding=cp1251 eol=crlf

View File

@ -1,25 +1,25 @@
create or replace package PKG_P8PANELS as create or replace package PKG_P8PANELS as
/* Исполнение действий клиентских приложений */ /* Исполнение действий клиентских приложений */
procedure PROCESS procedure PROCESS
( (
CIN in clob, -- Входные параметры CIN in clob, -- Входные параметры
COUT out clob -- Результат COUT out clob -- Результат
); );
end PKG_P8PANELS; end PKG_P8PANELS;
/ /
create or replace package body PKG_P8PANELS as create or replace package body PKG_P8PANELS as
/* Исполнение действий клиентских приложений */ /* Исполнение действий клиентских приложений */
procedure PROCESS procedure PROCESS
( (
CIN in clob, -- Входные параметры CIN in clob, -- Входные параметры
COUT out clob -- Результат COUT out clob -- Результат
) )
is is
begin begin
/* Базовое исполнение действия */ /* Базовое исполнение действия */
PKG_P8PANELS_BASE.PROCESS(CIN => CIN, COUT => COUT); PKG_P8PANELS_BASE.PROCESS(CIN => CIN, COUT => COUT);
end PROCESS; end PROCESS;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,53 +1,53 @@
create or replace procedure UDO_P_P8PANELS_AGNLIST create or replace procedure UDO_P_P8PANELS_AGNLIST
( (
NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number, -- Количество записей на странице (0 - все) NPAGE_SIZE in number, -- Количество записей на странице (0 - все)
CFILTERS in clob, -- Фильтры CFILTERS in clob, -- Фильтры
CORDERS in clob, -- Сортировки CORDERS in clob, -- Сортировки
NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных COUT out clob -- Сериализованная таблица данных
) )
is is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора
RF PKG_P8PANELS_VISUAL.TFILTERS; -- Фильтры RF PKG_P8PANELS_VISUAL.TFILTERS; -- Фильтры
RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
RCOL_VALS PKG_P8PANELS_VISUAL.TCOL_VALS; -- Предопределённые значения столбцов RCOL_VALS PKG_P8PANELS_VISUAL.TCOL_VALS; -- Предопределённые значения столбцов
NROW_FROM PKG_STD.TREF; -- Номер строки с NROW_FROM PKG_STD.TREF; -- Номер строки с
NROW_TO PKG_STD.TREF; -- Номер строки по NROW_TO PKG_STD.TREF; -- Номер строки по
CSQL clob; -- Буфер для запроса CSQL clob; -- Буфер для запроса
ICURSOR integer; -- Курсор для исполнения запроса ICURSOR integer; -- Курсор для исполнения запроса
RAGENT AGNLIST%rowtype; -- Буфер для записи курсора RAGENT AGNLIST%rowtype; -- Буфер для записи курсора
begin begin
/* Читаем фильтры */ /* Читаем фильтры */
RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS); RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS);
/* Читем сортировки */ /* Читем сортировки */
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS);
/* Преобразуем номер и размер страницы в номер строк с и по */ /* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER,
NPAGE_SIZE => NPAGE_SIZE, NPAGE_SIZE => NPAGE_SIZE,
NROW_FROM => NROW_FROM, NROW_FROM => NROW_FROM,
NROW_TO => NROW_TO); NROW_TO => NROW_TO);
/* Инициализируем таблицу данных */ /* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
/* Добавляем в таблицу описание колонок */ /* Добавляем в таблицу описание колонок */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'RN', SNAME => 'RN',
SCAPTION => 'Рег. номер', SCAPTION => 'Рег. номер',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNABBR', SNAME => 'AGNABBR',
SCAPTION => 'Мнемокод', SCAPTION => 'Мнемокод',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentAbbr', SCOND_FROM => 'AgentAbbr',
BORDER => true, BORDER => true,
BFILTER => true); BFILTER => true);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNNAME', SNAME => 'AGNNAME',
SCAPTION => 'Наименование', SCAPTION => 'Наименование',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentName', SCOND_FROM => 'AgentName',
BORDER => true, BORDER => true,
@ -56,7 +56,7 @@ begin
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1); PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNTYPE', SNAME => 'AGNTYPE',
SCAPTION => 'Тип', SCAPTION => 'Тип',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
SCOND_FROM => 'AgentType', SCOND_FROM => 'AgentType',
BORDER => true, BORDER => true,
@ -64,15 +64,15 @@ begin
RCOL_VALS => RCOL_VALS); RCOL_VALS => RCOL_VALS);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNBURN', SNAME => 'AGNBURN',
SCAPTION => 'Дата рождения', SCAPTION => 'Дата рождения',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
SCOND_FROM => 'AgentBornFrom', SCOND_FROM => 'AgentBornFrom',
SCOND_TO => 'AgentBornTo', SCOND_TO => 'AgentBornTo',
BORDER => true, BORDER => true,
BFILTER => true); BFILTER => true);
/* Обходим данные */ /* Обходим данные */
begin begin
/* Собираем запрос */ /* Собираем запрос */
CSQL := 'select * CSQL := 'select *
from (select D.*, from (select D.*,
ROWNUM NROW ROWNUM NROW
@ -84,60 +84,60 @@ begin
from AGNLIST AG from AGNLIST AG
where AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F where AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F
where F.NROW between :NROW_FROM and :NROW_TO'; where F.NROW between :NROW_FROM and :NROW_TO';
/* Учтём сортировки */ /* Учтём сортировки */
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL);
/* Учтём фильтры */ /* Учтём фильтры */
PKG_P8PANELS_VISUAL.TFILTERS_SET_QUERY(NIDENT => NIDENT, PKG_P8PANELS_VISUAL.TFILTERS_SET_QUERY(NIDENT => NIDENT,
NCOMPANY => NCOMPANY, NCOMPANY => NCOMPANY,
SUNIT => 'AGNLIST', SUNIT => 'AGNLIST',
SPROCEDURE => 'P_AGNLIST_BASE_COND', SPROCEDURE => 'P_AGNLIST_BASE_COND',
RDATA_GRID => RDG, RDATA_GRID => RDG,
RFILTERS => RF); RFILTERS => RF);
/* Разбираем его */ /* Разбираем его */
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
/* Делаем подстановку параметров */ /* Делаем подстановку параметров */
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NIDENT', NVALUE => NIDENT); PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NIDENT', NVALUE => NIDENT);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO);
/* Описываем структуру записи курсора */ /* Описываем структуру записи курсора */
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5); PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5);
/* Делаем выборку */ /* Делаем выборку */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
null; null;
end if; end if;
/* Обходим выбранные записи */ /* Обходим выбранные записи */
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
loop loop
/* Извлекаем очередную запись */ /* Извлекаем очередную запись */
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => RAGENT.RN); PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => RAGENT.RN);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => RAGENT.AGNABBR); PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => RAGENT.AGNABBR);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 3, SVALUE => RAGENT.AGNNAME); PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 3, SVALUE => RAGENT.AGNNAME);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 4, NVALUE => RAGENT.AGNTYPE); PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 4, NVALUE => RAGENT.AGNTYPE);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 5, DVALUE => RAGENT.AGNBURN); PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 5, DVALUE => RAGENT.AGNBURN);
/* Инициализируем строку таблицы данных */ /* Инициализируем строку таблицы данных */
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(); RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE();
/* Добавляем колонки с данными */ /* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'RN', NVALUE => RAGENT.RN); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'RN', NVALUE => RAGENT.RN);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNABBR', SVALUE => RAGENT.AGNABBR); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNABBR', SVALUE => RAGENT.AGNABBR);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNNAME', SVALUE => RAGENT.AGNNAME); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNNAME', SVALUE => RAGENT.AGNNAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNTYPE', NVALUE => RAGENT.AGNTYPE); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNTYPE', NVALUE => RAGENT.AGNTYPE);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNBURN', DVALUE => RAGENT.AGNBURN); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNBURN', DVALUE => RAGENT.AGNBURN);
/* Добавляем строку в таблицу */ /* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop; end loop;
/* Освобождаем курсор */ /* Освобождаем курсор */
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
exception exception
when others then when others then
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
raise; raise;
end; end;
/* Сериализуем описание */ /* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
end; end;
/ /

View File

@ -14,8 +14,8 @@ begin
NRES:=NRN*2; NRES:=NRN*2;
--DBMS_LOCK.SLEEP(3); --DBMS_LOCK.SLEEP(3);
if (DDATE is not null) then p_exception(0, to_char(ddate, 'dd.mm.yyyy hh24:mi:ss')); end if; if (DDATE is not null) then p_exception(0, to_char(ddate, 'dd.mm.yyyy hh24:mi:ss')); end if;
SRES:='Очень хорошая погода'; SRES:='Очень хорошая погода';
COUT:='Просто текст'; COUT:='Просто текст';
--COUT:='<DATA><XROWS><COL1>333</COL1><COL2>444</COL2></XROWS><EXTRA>123</EXTRA><MORE>dfgsfg</MORE></DATA>'; --COUT:='<DATA><XROWS><COL1>333</COL1><COL2>444</COL2></XROWS><EXTRA>123</EXTRA><MORE>dfgsfg</MORE></DATA>';
--COUT:='<DATA><XOUT_ARGUMENTS><SNAME>333</SNAME><VALUE>444</VALUE></XOUT_ARGUMENTS><XOUT_ARGUMENTS><SNAME>qqq</SNAME><VALUE>555</VALUE></XOUT_ARGUMENTS><XOUT_ARGUMENTS><SNAME>qsvfvr</SNAME><VALUE>432</VALUE></XOUT_ARGUMENTS><EXTRA>123</EXTRA><MORE>dfgsfg</MORE></DATA>'; --COUT:='<DATA><XOUT_ARGUMENTS><SNAME>333</SNAME><VALUE>444</VALUE></XOUT_ARGUMENTS><XOUT_ARGUMENTS><SNAME>qqq</SNAME><VALUE>555</VALUE></XOUT_ARGUMENTS><XOUT_ARGUMENTS><SNAME>qsvfvr</SNAME><VALUE>432</VALUE></XOUT_ARGUMENTS><EXTRA>123</EXTRA><MORE>dfgsfg</MORE></DATA>';
DD := DDATE; DD := DDATE;