номер строчки кода
|
Комментарии
|
3
|
Функция showAuditByAttribute предназначена для вывода
аудита по конкретному атрибуту.
|
5
|
Функция showAuditByObject
предназначена для вывода аудита по конкретному объекту.
|
6
|
Функция showAuditByObjectType
предназначена для вывода аудита по конкретному объектному типу.
|
7
|
Функция countTransactionsByAttribute предназначена для
вывода количества транзакций по конкретному атрибуту.
|
8
|
Функция countTransactionsByObject предназначена для вывода
количества транзакций по конкретному объекту.
|
9
|
Функция countTransactionsByObjectType предназначена для
вывода количества транзакций по конкретному объектному типу.
|
10
|
Функция pageAuditByAttribute предназначена для вывода
аудита по конкретному атрибуту в постраничном виде.
|
11
|
Функция pageAuditByObject предназначена для вывода аудита
по конкретному объекту в постраничном виде.
|
12
|
Функция pageAuditByObjectType предназначена для вывода
аудита по конкретному объектному типу в постраничном виде.
|
13
|
Функция showObjectRights предназначена для вывода
прав на объект в виде XML-документа.
|
14
|
Функция showFoundObjectRights предназначена для вывода
прав на найденные объекты в таблице Tempfoundobjects
в виде XML-документа
|
SQL> create or
replace package DATAMODIFICATION as
FUNCTION
showAuditByAttribute(nIDAttribute attributes.id%TYPE, nIdLanguage NUMBER)
RETURN XMLTYPE;
function
showAuditByObject(nIDObject objects.id%TYPE, nIdLanguage NUMBER) RETURN
XMLTYPE;
function
showAuditByObjectType(nIDObjectType objecttypes.id%TYPE, nIdLanguage NUMBER)
RETURN XMLTYPE;
function
countTransactionsByAttribute(nIDAttribute attributes.id%TYPE, nIdLanguage
NUMBER) RETURN NUMBER;
function
countTransactionsByObject(nIDObject objects.id%TYPE, nIdLanguage NUMBER) RETURN
NUMBER;
function
countTransactionsByObjectType(nIDObjectType objecttypes.id%TYPE, nIdLanguage
NUMBER) RETURN NUMBER;
FUNCTION
pageAuditByAttribute(nIDAttribute attributes.id%TYPE, nIdLanguage NUMBER,
nPageNumber NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE;
FUNCTION
pageAuditByObject(nIDObject objects.id%TYPE, nIdLanguage NUMBER, nPageNumber
NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE;
FUNCTION
pageAuditByObjectType(nIDObjectType objecttypes.id%TYPE, nIdLanguage NUMBER,
nPageNumber NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE;
function
showObjectRights(nIDObject objects.id%TYPE) RETURN XMLTYPE;
FUNCTION
showFoundObjectRights RETURN XMLTYPE;
end
DATAMODIFICATION;
17 /
Тело пакета DATAMODIFICATION
представлено ниже:
SQL> create or
replace package body DATAMODIFICATION as
FUNCTION
showAuditByAttribute(nIDAttribute attributes.id%TYPE, nIdLanguage NUMBER)
RETURN XMLTYPE AS
nDataType
attributes.iddatatype%TYPE;
xDocument XMLTYPE;
vName
datatypes.name%TYPE;
BEGIN
SELECT idDataType
INTO nDataType FROM attributes WHERE id = nIDAttribute;
SELECT name INTO
vName FROM datatypes WHERE id = nDataType;
IF vName =
'MULTILANG' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'MULTILANG' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, uml.*,
s.*, rownum r
FROM attributes a,
usermultilangvalueslog uml, systemdatavalues s
WHERE a.id =
nIDAttribute and uml.id_attribute = nIDAttribute AND uml.id_attribute =
s.idparent AND s.idlanguage = nIdLanguage
)A
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'VARCHAR2' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'STRING' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userstringvalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'NUMBER' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'NUMBER' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
usernumbervalueslog usl, systemdatavalues s
WHERE a.id = nIDAttribute
and usl.id_attribute = nIDAttribute AND usl.id_attribute = s.idparent AND
s.idlanguage = 1
)A
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'DATE' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'DATE' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userdatevalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'CLOB' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'CLOB' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userclobvalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'DICTIONARY' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'DICTIONARY' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userdictionaryvalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
END IF;
RETURN NULL;
END
showAuditByAttribute;
FUNCTION
showAuditByObject(nIDObject objects.id%TYPE, nIdLanguage NUMBER) RETURN XMLTYPE
AS
xDocument XMLTYPE;
BEGIN
SELECT
XMLElement("object_summary",
XMLAttributes(nIDObject AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
A.new_idattribute
AS id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.attribute_note AS attribute_note,
A.attribute_datatype
AS attribute_datatype, A.datatype_length AS datatype_length
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
),
XMLElement("object",
XMLAttributes(
A.OLD_IDPARENTOBJECT
AS OLD_IDPARENTOBJECT,
A.NEW_IDPARENTOBJECT
AS NEW_IDPARENTOBJECT,
A.OBJECTTYPE
NEW_OBJECTTYPE,
A.OLD_OWNER
OLD_OWNER,
A.NEW_OWNER
NEW_OWNER,
A.OLD_ORIGHTS
OLD_ORIGHTS,
A.NEW_ORIGHTS
NEW_ORIGHTS,
A.OLD_ARIGHTS
OLD_ARIGHTS,
A.NEW_ARIGHTS
NEW_ARIGHTS,
A.OPERATION
OPERATION,
A.OBJECTNOTE
OBJECTNOTE
)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
--usermultilangvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time AS
modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'MULTILANG' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usermultilangvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userstringvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'STRING' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userstringvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdatevalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'DATE' AS
attribute_datatype,
a.length AS datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdatevalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userclobvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userclobvalueslog uml, systemdatavalues s
WHERE o.id = nIDObject
and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND
S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--usernumbervalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null OBJECTTYPE,
null
NEW_OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usernumbervalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdictionaryvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdictionaryvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
SELECT null AS new_idattribute,
null AS old_value,
null AS new_value,
null AS
old_serialnumber,
null AS
new_serialnumber,
OL.MODIFIED_USER AS
modified_user,
OL.MODIFIED_TIME AS
modified_time,
null AS
type_of_operation,
null AS
attribute_note,
null AS
attribute_datatype,
null AS
datatype_length,
OL.OLD_IDPARENTOBJECT
OLD_IDPARENTOBJECT,
OL.NEW_IDPARENTOBJECT
NEW_IDPARENTOBJECT,
OL.NEW_OBJECTTYPE
NEW_OBJECTTYPE,
OL.OLD_OWNER
OLD_OWNER,
OL.NEW_OWNER
NEW_OWNER,
OL.OLD_ORIGHTS
OLD_ORIGHTS,
OL.NEW_ORIGHTS
NEW_ORIGHTS,
OL.OLD_ARIGHTS
OLD_ARIGHTS,
OL.TYPE_OF_OPERATION
OPERATION,
s.value OBJECTNOTE
FROM objectslog OL,
systemdatavalues s
WHERE OL.ID_OBJECT
= nIDObject and s.idparent = OL.ID_OBJECT AND S.IDLANGUAGE = nIdLanguage
) A
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
END
showAuditByObject;
function
showAuditByObjectType(nIDObjectType objecttypes.id%TYPE, nIdLanguage NUMBER)
RETURN XMLTYPE IS
xDocument XMLTYPE;
BEGIN
SELECT
XMLElement("object_type",
XMLAttributes(1 AS
idObjectType),
XMLElement("objects_summary",
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLElement("object_info",
XMLAttributes(A.id
AS "object_id"),
XMLElement("attribute",
XMLAttributes(
A.new_idattribute
AS id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.attribute_note AS attribute_note,
A.attribute_datatype
AS attribute_datatype, A.datatype_length AS datatype_length
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
),
XMLElement("object_change",
XMLAttributes(
A.OLD_IDPARENTOBJECT
AS OLD_IDPARENTOBJECT,
A.NEW_IDPARENTOBJECT
AS NEW_IDPARENTOBJECT,
A.OBJECTTYPE
NEW_OBJECTTYPE,
A.OLD_OWNER
OLD_OWNER,
A.NEW_OWNER
NEW_OWNER,
A.OLD_ORIGHTS
OLD_ORIGHTS,
A.NEW_ORIGHTS
NEW_ORIGHTS,
A.OLD_ARIGHTS
OLD_ARIGHTS,
A.NEW_ARIGHTS
NEW_ARIGHTS,
A.OPERATION
OPERATION,
A.OBJECTNOTE
OBJECTNOTE
)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
)
INTO xDocument
--showAuditByObject(id,
nIdLanguage)
--) AS objects)
FROM (
SELECT B.*, rownum
r
FROM (
--usermultilangvalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'MULTILANG' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usermultilangvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userstringvalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'STRING' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userstringvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdatevalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'DATE' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdatevalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userclobvalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userclobvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--usernumbervalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null OBJECTTYPE,
null
NEW_OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usernumbervalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdictionaryvalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdictionaryvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
SELECT
o.id AS id,
null AS
new_idattribute,
null AS old_value,
null AS new_value,
null AS
old_serialnumber,
null AS
new_serialnumber,
OL.MODIFIED_USER AS
modified_user,
OL.MODIFIED_TIME AS
modified_time,
null AS
type_of_operation,
null AS
attribute_note,
null AS
attribute_datatype,
null AS
datatype_length,
OL.OLD_IDPARENTOBJECT
OLD_IDPARENTOBJECT,
OL.NEW_IDPARENTOBJECT
NEW_IDPARENTOBJECT,
OL.NEW_OBJECTTYPE
NEW_OBJECTTYPE,
OL.OLD_OWNER
OLD_OWNER,
OL.NEW_OWNER
NEW_OWNER,
OL.OLD_ORIGHTS
OLD_ORIGHTS,
OL.NEW_ORIGHTS
NEW_ORIGHTS,
OL.OLD_ARIGHTS
OLD_ARIGHTS,
OL.NEW_ARIGHTS
NEW_ARIGHTS,
OL.TYPE_OF_OPERATION
OPERATION,
s.value OBJECTNOTE
FROM objectslog OL,
systemdatavalues s, objects o
WHERE
o.idobjecttype = nIDObjectType AND OL.ID_OBJECT = o.id and s.idparent =
OL.ID_OBJECT AND S.IDLANGUAGE = nIdLanguage
-- ORDER BY
modified_time
) B)A
GROUP BY
A.modified_time, A.MODIFIED_USER
ORDER BY
A.modified_time;
RETURN xDocument;
END showAuditByObjectType;
function
countTransactionsByAttribute(nIDAttribute attributes.id%TYPE, nIdLanguage
NUMBER) RETURN NUMBER IS
nAmountTransactions
NUMBER;
nDataType
attributes.iddatatype%TYPE;
vName
datatypes.name%TYPE;
BEGIN
SELECT idDataType
INTO nDataType FROM attributes WHERE id = nIDAttribute;
SELECT name INTO
vName FROM datatypes WHERE id = nDataType;
IF vName =
'MULTILANG' THEN
SELECT count(*)
INTO
nAmountTransactions
FROM
(SELECT
modified_time
FROM
usermultilangvalueslog u, systemdatavalues s
WHERE
u.id_attribute = nIDAttribute AND u.id_attribute = s.idparent AND s.idlanguage
= nIdLanguage
GROUP BY
u.modified_time) A;
RETURN
nAmountTransactions;
ELSIF vName =
'VARCHAR2' THEN
SELECT count(*)
INTO
nAmountTransactions
FROM
(SELECT
modified_time
FROM
userstringvalueslog u, systemdatavalues s
WHERE
u.id_attribute = nIDAttribute AND u.id_attribute = s.idparent AND s.idlanguage
= nIdLanguage
GROUP BY
u.modified_time) A;
RETURN
nAmountTransactions;
ELSIF vName =
'NUMBER' THEN
SELECT count(*)
INTO
nAmountTransactions
FROM
(SELECT
modified_time
FROM
usernumbervalueslog u, systemdatavalues s
WHERE
u.id_attribute = nIDAttribute AND u.id_attribute = s.idparent AND s.idlanguage
= nIdLanguage
GROUP BY u.modified_time)
A;
RETURN
nAmountTransactions;
ELSIF vName =
'DATE' THEN
SELECT count(*)
INTO
nAmountTransactions
FROM
(SELECT
modified_time
FROM
userdatevalueslog u, systemdatavalues s
WHERE
u.id_attribute = nIDAttribute AND u.id_attribute = s.idparent AND s.idlanguage
= nIdLanguage
GROUP BY
u.modified_time) A;
RETURN
nAmountTransactions;
ELSIF vName =
'CLOB' THEN
SELECT count(*)
INTO
nAmountTransactions
FROM
(SELECT
modified_time
FROM
userclobvalueslog u, systemdatavalues s
WHERE
u.id_attribute = nIDAttribute AND u.id_attribute = s.idparent AND s.idlanguage
= nIdLanguage
GROUP BY
u.modified_time) A;
RETURN
nAmountTransactions;
ELSIF vName =
'DICTIONARY' THEN
SELECT count(*)
INTO
nAmountTransactions
FROM
(SELECT modified_time
FROM
userdictionaryvalueslog u, systemdatavalues s
WHERE
u.id_attribute = nIDAttribute AND u.id_attribute = s.idparent AND s.idlanguage
= nIdLanguage
GROUP BY
u.modified_time) A;
RETURN
nAmountTransactions;
END IF;
RETURN 0;
RETURN
nAmountTransactions;
EXCEPTION WHEN
NO_DATA_FOUND THEN
RETURN 0;
END
countTransactionsByAttribute;
function
countTransactionsByObject(nIDObject objects.id%TYPE, nIdLanguage NUMBER) RETURN
NUMBER IS
nAmountTransactions
NUMBER;
BEGIN
SELECT count(*) INTO
nAmountTransactions FROM (
SELECT
a.modified_time
FROM (
--usermultilangvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
s.value AS
attribute_note,
'MULTILANG' AS
attribute_datatype,
a.length AS
datatype_length,
null OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usermultilangvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userstringvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'STRING' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userstringvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdatevalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'DATE' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdatevalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userclobvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userclobvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--usernumbervalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null OBJECTTYPE,
null
NEW_OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usernumbervalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdictionaryvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdictionaryvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
SELECT null AS
new_idattribute,
null AS old_value,
null AS new_value,
null AS
old_serialnumber,
null AS
new_serialnumber,
OL.MODIFIED_USER AS
modified_user,
OL.MODIFIED_TIME AS
modified_time,
null AS
type_of_operation,
null AS
attribute_note,
null AS
attribute_datatype,
null AS
datatype_length,
OL.OLD_IDPARENTOBJECT
OLD_IDPARENTOBJECT,
OL.NEW_IDPARENTOBJECT
NEW_IDPARENTOBJECT,
OL.NEW_OBJECTTYPE
NEW_OBJECTTYPE,
OL.OLD_OWNER
OLD_OWNER,
OL.NEW_OWNER
NEW_OWNER,
OL.OLD_ORIGHTS
OLD_ORIGHTS,
OL.NEW_ORIGHTS
NEW_ORIGHTS,
OL.OLD_ARIGHTS
OLD_ARIGHTS,
OL.NEW_ARIGHTS
NEW_ARIGHTS,
OL.TYPE_OF_OPERATION
OPERATION,
s.value OBJECTNOTE
FROM objectslog OL,
systemdatavalues s
WHERE OL.ID_OBJECT
= nIDObject and s.idparent = OL.ID_OBJECT AND S.IDLANGUAGE = nIdLanguage
) A
GROUP BY
A.modified_time) B;
RETURN
nAmountTransactions;
END
countTransactionsByObject;
function
countTransactionsByObjectType(nIDObjectType objecttypes.id%TYPE, nIdLanguage
NUMBER) RETURN NUMBER IS
nAmountTransactions
NUMBER;
BEGIN
SELECT
sum(countTransactionsByObject(id, nIdLanguage))
INTO
nAmountTransactions
FROM objects o
WHERE
o.idobjecttype = nIDObjectType
AND (EXISTS (SELECT
* FROM userclobvalueslog u WHERE u.id_object = o.id)
OR EXISTS (SELECT *
FROM userdatevalueslog u WHERE u.id_object = o.id)
OR EXISTS (SELECT *
FROM userdictionaryvalueslog u WHERE u.id_object = o.id)
OR EXISTS (SELECT *
FROM usermultilangvalueslog u WHERE u.id_object = o.id)
OR EXISTS (SELECT *
FROM usernumbervalueslog u WHERE u.id_object = o.id)
OR EXISTS (SELECT *
FROM userstringvalueslog u WHERE u.id_object = o.id));
RETURN
nAmountTransactions;
END
countTransactionsByObjectType;
FUNCTION
pageAuditByAttribute(nIDAttribute attributes.id%TYPE, nIdLanguage NUMBER,
nPageNumber NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE AS
nDataType
attributes.iddatatype%TYPE;
xDocument XMLTYPE;
vName
datatypes.name%TYPE;
BEGIN
SELECT idDataType
INTO nDataType FROM attributes WHERE id = nIDAttribute;
SELECT name INTO
vName FROM datatypes WHERE id = nDataType;
IF vName = 'MULTILANG'
THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'MULTILANG' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, uml.*,
s.*, rownum r
FROM attributes a,
usermultilangvalueslog uml, systemdatavalues s
WHERE a.id =
nIDAttribute and uml.id_attribute = nIDAttribute AND uml.id_attribute =
s.idparent AND s.idlanguage = nIdLanguage
)A
WHERE (A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'VARCHAR2' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'STRING' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userstringvalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
WHERE (A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'NUMBER' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'NUMBER' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
usernumbervalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
WHERE (A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'DATE' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'DATE' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userdatevalueslog usl, systemdatavalues s
WHERE a.id = nIDAttribute
and usl.id_attribute = nIDAttribute AND usl.id_attribute = s.idparent AND
s.idlanguage = 1
)A
WHERE (A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'CLOB' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'CLOB' AS
attribute_datatype
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userclobvalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
WHERE (A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
ELSIF vName =
'DICTIONARY' THEN
SELECT
XMLElement("attribute_summary",
XMLAttributes(nIDAttribute AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
nIDAttribute AS
id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.note AS attribute_note,
'DICTIONARY' AS
attribute_datatype
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT a.*, usl.*,
s.*, rownum r
FROM attributes a,
userdictionaryvalueslog usl, systemdatavalues s
WHERE a.id =
nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute =
s.idparent AND s.idlanguage = 1
)A
WHERE (A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY
A.modified_time, A.MODIFIED_USER;
RETURN xDocument;
END IF;
RETURN NULL;
END
pageAuditByAttribute;
FUNCTION
pageAuditByObject(nIDObject objects.id%TYPE, nIdLanguage NUMBER, nPageNumber
NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE AS
xDocument XMLTYPE;
BEGIN
SELECT
XMLElement("object_summary",
XMLAttributes(nIDObject AS id),
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLConcat(
XMLElement("attribute",
XMLAttributes(
A.new_idattribute
AS id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.attribute_note AS attribute_note,
A.attribute_datatype
AS attribute_datatype, A.datatype_length AS datatype_length
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
),
XMLElement("object",
XMLAttributes(
A.OLD_IDPARENTOBJECT
AS OLD_IDPARENTOBJECT,
A.NEW_IDPARENTOBJECT
AS NEW_IDPARENTOBJECT,
A.OBJECTTYPE
NEW_OBJECTTYPE,
A.OLD_OWNER
OLD_OWNER,
A.NEW_OWNER
NEW_OWNER,
A.OLD_ORIGHTS
OLD_ORIGHTS,
A.NEW_ORIGHTS
NEW_ORIGHTS,
A.OLD_ARIGHTS
OLD_ARIGHTS,
A.NEW_ARIGHTS
NEW_ARIGHTS,
A.OPERATION
OPERATION,
A.OBJECTNOTE
OBJECTNOTE
)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
INTO xDocument
FROM (
SELECT B.*, rownum
r
FROM (
--usermultilangvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'MULTILANG' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usermultilangvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userstringvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'STRING' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userstringvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdatevalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'DATE' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdatevalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userclobvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userclobvalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent =
a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--usernumbervalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null OBJECTTYPE,
null
NEW_OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usernumbervalueslog uml, systemdatavalues s
WHERE o.id =
nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent
= a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdictionaryvalueslog
SELECT
uml.id_attribute AS new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdictionaryvalueslog uml, systemdatavalues s
WHERE o.id = nIDObject
and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND
S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
SELECT null AS
new_idattribute,
null AS old_value,
null AS new_value,
null AS
old_serialnumber,
null AS
new_serialnumber,
OL.MODIFIED_USER AS
modified_user,
OL.MODIFIED_TIME AS
modified_time,
null AS
type_of_operation,
null AS
attribute_note,
null AS
attribute_datatype,
null AS
datatype_length,
OL.OLD_IDPARENTOBJECT
OLD_IDPARENTOBJECT,
OL.NEW_IDPARENTOBJECT
NEW_IDPARENTOBJECT,
OL.NEW_OBJECTTYPE
NEW_OBJECTTYPE,
OL.OLD_OWNER
OLD_OWNER,
OL.NEW_OWNER
NEW_OWNER,
OL.OLD_ORIGHTS
OLD_ORIGHTS,
OL.NEW_ORIGHTS
NEW_ORIGHTS,
OL.OLD_ARIGHTS
OLD_ARIGHTS,
OL.NEW_ARIGHTS
NEW_ARIGHTS,
OL.TYPE_OF_OPERATION
OPERATION,
s.value OBJECTNOTE
FROM objectslog OL,
systemdatavalues s
WHERE OL.ID_OBJECT
= nIDObject and s.idparent = OL.ID_OBJECT AND S.IDLANGUAGE = nIdLanguage
-- ORDER BY
modified_time
) B)A
WHERE (A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY
A.modified_time, A.MODIFIED_USER
-- HAVING
count(A.MODIFIED_TIME) between ((nPageNumber-1)*nAmountPerPage+1) and
(nPageNumber*nAmountPerPage)--;
ORDER BY
A.modified_time;
RETURN xDocument;
END
pageAuditByObject;
FUNCTION
pageAuditByObjectType(nIDObjectType objecttypes.id%TYPE, nIdLanguage NUMBER,
nPageNumber NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE IS
xDocument XMLTYPE;
BEGIN
--SELECT
--XMLElement("object_type",
--
XMLAttributes(nIDObjectType AS idObjectType),
--
XMLElement("a",
SELECT
XMLElement("object_type",
XMLAttributes(1 AS
idObjectType),
XMLElement("objects_summary",
XMLAgg(XMLElement("transaction",
XMLAttributes(to_char(A.modified_time,
'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
XMLAgg(
XMLElement("object_info",
XMLAttributes(A.id
AS "object_id"),
XMLElement("attribute",
XMLAttributes(
A.new_idattribute
AS id_attribute,
A.old_serialnumber
AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
A.type_of_operation
AS type_of_operation, A.attribute_note AS attribute_note,
A.attribute_datatype
AS attribute_datatype, A.datatype_length AS datatype_length
),
XMLElement("old_value_attribute",A.old_value),
XMLElement("new_value_attribute",A.new_value)
),
XMLElement("object_change",
XMLAttributes(
A.OLD_IDPARENTOBJECT
AS OLD_IDPARENTOBJECT,
A.NEW_IDPARENTOBJECT
AS NEW_IDPARENTOBJECT,
A.OBJECTTYPE
NEW_OBJECTTYPE,
A.OLD_OWNER OLD_OWNER,
A.NEW_OWNER
NEW_OWNER,
A.OLD_ORIGHTS
OLD_ORIGHTS,
A.NEW_ORIGHTS
NEW_ORIGHTS,
A.OLD_ARIGHTS
OLD_ARIGHTS,
A.NEW_ARIGHTS
NEW_ARIGHTS,
A.OPERATION
OPERATION,
A.OBJECTNOTE
OBJECTNOTE
)
)
)--XMLConcat
)--XMLAgg
)--XMLAttributes
order by
A.modified_time desc
)
)
)
INTO xDocument
--showAuditByObject(id,
nIdLanguage)
--) AS objects)
FROM (
SELECT B.*, rownum
r
FROM (
--usermultilangvalueslog
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS attribute_note,
'MULTILANG' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usermultilangvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userstringvalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'STRING' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userstringvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object = o.id
and uml.id_attribute = a.id)
UNION ALL
--userdatevalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'DATE' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdatevalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userclobvalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userclobvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--usernumbervalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null OBJECTTYPE,
null
NEW_OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, usernumbervalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
--userdictionaryvalueslog
SELECT
o.id AS id,
uml.id_attribute AS
new_idattribute,
to_clob(uml.old_value)
AS old_value,
to_clob(uml.new_value)
AS new_value,
uml.old_serialnumber
AS old_serialnumber,
uml.new_serialnumber
AS new_serialnumber,
uml.modified_user
AS modified_user,
uml.modified_time
AS modified_time,
uml.type_of_operation
AS type_of_operation,
s.value AS
attribute_note,
'CLOB' AS
attribute_datatype,
a.length AS
datatype_length,
null
OLD_IDPARENTOBJECT,
null
NEW_IDPARENTOBJECT,
null OBJECTTYPE,
null OLD_OWNER,
null NEW_OWNER,
null OLD_ORIGHTS,
null NEW_ORIGHTS,
null OLD_ARIGHTS,
null NEW_ARIGHTS,
null OPERATION,
null OBJECTNOTE
FROM objects o,
attributes a, objecttypes ot, userdictionaryvalueslog uml, systemdatavalues s
WHERE
o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype =
ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
AND
(uml.id_object =
o.id and uml.id_attribute = a.id)
UNION ALL
SELECT
o.id AS id,
null AS
new_idattribute,
null AS old_value,
null AS new_value,
null AS
old_serialnumber,
null AS
new_serialnumber,
OL.MODIFIED_USER AS
modified_user,
OL.MODIFIED_TIME AS
modified_time,
null AS
type_of_operation,
null AS
attribute_note,
null AS
attribute_datatype,
null AS
datatype_length,
OL.OLD_IDPARENTOBJECT
OLD_IDPARENTOBJECT,
OL.NEW_IDPARENTOBJECT
NEW_IDPARENTOBJECT,
OL.NEW_OBJECTTYPE
NEW_OBJECTTYPE,
OL.OLD_OWNER
OLD_OWNER,
OL.NEW_OWNER
NEW_OWNER,
OL.OLD_ORIGHTS
OLD_ORIGHTS,
OL.NEW_ORIGHTS
NEW_ORIGHTS,
OL.OLD_ARIGHTS
OLD_ARIGHTS,
OL.NEW_ARIGHTS
NEW_ARIGHTS,
OL.TYPE_OF_OPERATION
OPERATION,
s.value OBJECTNOTE
FROM objectslog OL,
systemdatavalues s, objects o
WHERE
o.idobjecttype = nIDObjectType AND OL.ID_OBJECT = o.id and s.idparent =
OL.ID_OBJECT AND S.IDLANGUAGE = nIdLanguage
-- ORDER BY
modified_time
) B)A
WHERE
(A.r between
((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
GROUP BY A.modified_time,
A.MODIFIED_USER--, A.ID
ORDER BY
A.modified_time;
RETURN xDocument;
END
pageAuditByObjectType;
FUNCTION
addGroupRights(nIDObject objects.id%TYPE) RETURN XMLTYPE IS
xDocument XMLTYPE;
BEGIN
SELECT
XMLAgg(
XMLElement("usergroup",
XMLAttributes(ug.name
AS group_name
,uug.grights AS
"group_default_right"
,oug.grights AS
"group_object_right")
)
)
INTO xDocument
FROM users u,
usergroups ug, users_usergroups uug, objects_usergroups oug
WHERE u.id =
uug.id_user and uug.id_usergroup = oug.id_usergroup(+) and u.name = user
and (oug.id_object
= nIDObject or oug.id_object is null)
and ug.id =
uug.id_usergroup;
RETURN xDocument;
END addGroupRights;
FUNCTION
showObjectRights(nIDObject objects.id%TYPE) RETURN XMLTYPE IS
xDocument XMLTYPE;
BEGIN
SELECT
XMLElement("object_rights",
XMLAttributes(nIDObject
AS id_object),
XMLElement("owner",
o.owner),
XMLElement("owner_right",
o.orights),
XMLElement("usergroups",addGroupRights(nIDObject)),
XMLElement("others_right",
o.arights)
)
INTO xDocument
FROM objects o
WHERE o.id =
nIDObject;
RETURN xDocument;
END
showObjectRights;
FUNCTION
showFoundObjectRights RETURN XMLTYPE IS
xDocument XMLTYPE;
BEGIN
SELECT
XMLElement("Found_object_rights",
XMLAgg(
XMLElement("object",
XMLAttributes(o.id
AS id_object),
XMLElement("owner",
o.owner),
XMLElement("owner_right",
o.orights),
XMLElement("usergroups",datamodification.addGroupRights(o.id)),
XMLElement("others_right",
o.arights)
)
)
)
INTO xDocument
FROM objects o,
tempfoundobjects t
WHERE o.id = t.id;
RETURN xDocument;
END
showFoundObjectRights;
end
DATAMODIFICATION;
1871 /
Листинг пакета GENERATETABLES
Пакет GENERATETABLES
предназначен для генерации пользовательских таблиц.
Таким образом, будут пересозданы все объекты пользовательских схем: вначале
будут созданы пользовательские таблицы, затем на них пользовательские
представления. Код заголовка пакета и комментарии к заголовку пакета (см.
таб.Пр.1.2.) ниже:
Таблица Пр1.2. Комментарии к
заголовку пакета generateTables.
Номер строчки кода
|
Комментарии
|
3
|
Процедура doGenerate предназначена для генерации, состоящей из удаления таблиц
(если они существуют), создания и вставки значений данных в генерируемые
таблицы.
|
4
|
Процедура createParentTables предназначена для создания генерируемых таблиц с
атрибутами соответвующими объектному типу, для которого создается плоская
таблица.
|
5
|
Процедура insertDataParentTables предназначена для вставки значений для сгенерированных
таблиц.
|
SQL> CREATE OR
REPLACE PACKAGE generateTables IS
procedure
doGenerate;
procedure
createParentTables;
procedure
insertDataParentTables;
END generateTables;
/created
Небольшие комментарии по реализации тела пакета generateTables:
Таблица Пр1.3. Комментарии к
телу пакета generateTables.
Номера строчек кода
|
Комментарии
|
3-19
|
Процедура dropParentTables предназначена для удаления таблиц (если они существуют)
схемы. Обратите внимание, что ее спецификации нету в заголовке пакета generateTables,
поэтому она доступна только внутри пакета другим процедурам этого пакета.
Создается курсор for curTables IN (select name from objecttypes) LOOP - 7 строка, по которым удаляются таблицы соответствующих
объектных типов. Если такой таблицы по какой-либо причине нету, то срабатывает
исключение, выводится сообщение о том, что такой таблицы нету, и цикл 7
строки продолжается.
|
21-38
|
Процедура createParentTables предназначена для создания генерируемых таблиц с
атрибутами соответвующие объектному типу, для которого создается плоская
таблица. Для этого создается курсор по всем объектным типам. В переменную сSQLCode,
предназначенную для хранения динамического SQL кода,
записывается код, который собирается, как совокупность объектного типа
(значение внешнего курсора for curTables IN (select name, id from objecttypes) LOOP - 25 строка кода) и атрибутов ему соответствующих
(значения параметризированного внутреннего курсора for
curAttributes IN (select name, iddatatype, length from attributes where idobjecttype = curTables.id) LOOP - 27 строка кода).
|
40-61
|
Процедура insertDataParentTables предназначена для вставки значений для сгенерированных
таблиц. Для этого создается курсор по всем объектным типам. В переменную сSQLCode,
предназначенную для хранения динамического SQL кода,
записывается код, который собирается, как совокупность объектного типа
(значение внешнего курсора for curTables IN (select name, id from objecttypes) LOOP - 45 строка кода) и атрибутов ему соответствующих
(значения параметризированного курсора for
curAttributes IN (select name, iddatatype, length from attributes where idobjecttype = curTables.id) LOOP - 47 строка кода). Значения в генерируемую таблицу
выбираются из системной таблицы userStringValues, которая хранит
в поле Value значения для соответветствующего атрибута и объекта (его id задается из
внутреннего курсора for curObjects IN (SELECT id from objects where idobjecttype = curTables.id) LOOP - 50 строка кода).
|
63-68
|
Процедура doGenerate предназначена для генерации, состоящей из удаления таблиц
(если они существуют), создания и вставки значений данных в генерируемые
таблицы и состоит из последовательного вызова процедур dropParentTables,
createParentTables и insertDataParentTables.
|
SQL> CREATE OR
REPLACE PACKAGE BODY generateTables IS
procedure
dropParentTables is
vSQLCode
VARCHAR2(4000);
eTableNotExists
EXCEPTION;
PRAGMA
EXCEPTION_INIT(eTableNotExists, -00942);
begin
for curTables IN
(select name from objecttypes) LOOP
BEGIN
vSQLCode := 'DROP
TABLE '||curTables.Name;
EXECUTE IMMEDIATE
vSQLCode;
DBMS_OUTPUT.put_line(vSQLCode);
EXCEPTION
WHEN
eTableNotExists THEN
--catch the
exception that the table doesn't exist and continue dropping the schema tables
DBMS_OUTPUT.put_line('TABLE
'||curTables.Name||' doesn''t exist and therefore can''t be dropped');
END;
END LOOP;
end
dropParentTables;
procedure
createParentTables is
cSQLCode
VARCHAR2(4000);
vName
VARCHAR2(4000);
begin
for curTables IN
(select name, id from objecttypes) LOOP
cSQLCode := 'CREATE
TABLE '||curTables.Name||'(ID NUMBER PRIMARY KEY';
for curAttributes
IN (select name, iddatatype, length from attributes where idobjecttype =
curTables.id) LOOP
select name into
vName from datatypes where id = curAttributes.Iddatatype;
cSQLCode :=
cSQLCode || ',' || curAttributes.Name || ' ' || vName;
if vName =
'VARCHAR2' THEN
cSQLCode :=
cSQLCode ||'(' || curAttributes.Length ||')';
END IF;
end loop;
cSQLCode :=
cSQLCode ||')';
--DBMS_OUTPUT.put_line(cSQLCode);
EXECUTE IMMEDIATE
cSQLCode;
END LOOP;
end
createParentTables;
procedure
insertDataParentTables is
cSQLCode
VARCHAR2(4000);
cTableCode
VARCHAR2(2000);
vValue
VARCHAR2(200);
begin
for curTables IN
(select name, id from objecttypes) LOOP
cTableCode :=
'INSERT INTO '||curTables.Name||'(ID';
for curAttributes
IN (select name, iddatatype, length from attributes where idobjecttype =
curTables.id) LOOP
cTableCode :=
cTableCode ||',' || curAttributes.Name;
end loop;
for curObjects IN
(SELECT id from objects where idobjecttype = curTables.id) LOOP
cSQLCode :=
cTableCode || ') VALUES (' || curObjects.id;
for curAttributes
IN (select name, iddatatype, length, id from attributes where idobjecttype =
curTables.id) LOOP
select value into
vvalue from userstringvalues where idobject = curObjects.id and idattribute =
curAttributes.id;
cSQLCode :=
cSQLCode || ', ''' || vvalue || '''';
end loop;
cSQLCode :=
cSQLCode || ')';
END LOOP;
END LOOP;
COMMIT;
end
insertDataParentTables;
procedure
doGenerate IS
BEGIN
dropParentTables;
createParentTables;
insertDataParentTables;
END doGenerate;
END generateTables;
/body created
Листинг пакета SEARCHDATA
Пакет SEARCHDATA
предназначен для поиска объектов по набору атрибутов и заданным поисковых
параметрам по этим атрибутам. Код заголовка пакета и комментарии к заголовку
пакета (см. таб.Пр.1.4.) ниже:
Таблица Пр.1.4. Комментарии к заголовку пакета SEARCHDATA.
номер строчки кода
|
Комментарии
|
2
|
Функция insertSearchParameters предназначена для вставки задаваемых в приложении
поисковых параметров в таблицу SEARCHPARAMETERS.
|
3
|
Процедура clearSearchParameters предназначена для удаления записей поисковых параметров в
таблице SEARCHPARAMETERS.
|
4
|
Функция getObjectPageIndex предназначена для вывода номера страницы на найденный
объект.
|
5
|
Функция doSearch предназначена для поиска.
|
6
|
Функция getSearchParamNum предназначена для вывода количества заданных поисковых
параметров в таблице SEARCHPARAMETERS.
|
7
|
Функция getFoundObjectNum предназначена для вывода общего количества найденных
объектов.
|
8
|
Перегруженная функция getFoundObjectNum
предназначена для вывода общего количества найденных объектов по заданному
объектному типу.
|
9
|
Функция getConditionType предназначена для вывода наименования поискового атрибута
по его id.
|
SQL> create or
replace package SEARCHDATA as
function
insertSearchParameters (nIDAttribute NUMBER,nIDCondition NUMBER,vValue
VARCHAR2,nIDLanguage NUMBER) return NUMBER;
procedure
clearSearchParameters;
function
getObjectPageIndex (nIDObject NUMBER,nPageSize NUMBER) return NUMBER;
function doSearch
(nIDObjectType NUMBER) return NUMBER;
function
getSearchParamNum return NUMBER;
function
getFoundObjectNum return NUMBER;
function
getFoundObjectNum (nIDObjectType NUMBER) return NUMBER;
function
getConditionType (nIdCondition NUMBER) return VARCHAR2;
end SEARCHDATA;
/
Листинг пакета
SEARCHDATA приведен ниже.
Отмечу,
что в теле пакета есть private-функция
getQueryText(31-57 строки). Эта
функция предназначена для формирования кода запроса для поиска по объектам.
SQL> create or
replace package body SEARCHDATA as
function
insertSearchParameters (nIDAttribute NUMBER,nIDCondition NUMBER,vValue
VARCHAR2,nIDLanguage NUMBER) return NUMBER as
BEGIN
INSERT INTO
SEARCHPARAMETERS (IDATTRIBUTE,IDCONDITION,IDLANGUAGE,VALUE,IDSEARCHOBJECTTYPE)
SELECT
nIDAttribute,nIDCondition,nIDLanguage, NVL(vValue, 0), ID
FROM attributes
WHERE idobjecttype = nIDAttribute;
RETURN
SQL%ROWCOUNT;
END;
procedure
clearSearchParameters as
begin
DELETE FROM
SEARCHPARAMETERS;
end;
function
getObjectPageIndex (nIDObject NUMBER,nPageSize NUMBER) return NUMBER as
nPageNumber NUMBER;
nSerial NUMBER;
BEGIN
-- get object
serial number
SELECT
A.OBJECTSERIAL INTO nSerial FROM TEMPFOUNDOBJECTS A WHERE A.ID = nIDObject;
-- get page number
SELECT
CEIL(COUNT(*)/nPageSize) INTO nPageNumber FROM TEMPFOUNDOBJECTS A
WHERE
A.OBJECTSERIAL <= nSerial;
RETURN nPageNumber;
EXCEPTION WHEN
NO_DATA_FOUND THEN RETURN -1;
END;
function
getQueryText (nIDObjectType NUMBER) return CLOB as
vBaseTableName
VARCHAR2(50) := ObjectsData.getObjectTypeSystemName(nIDObjectType);
cSQLText CLOB;
BEGIN
SELECT A.NAME
INTO vBaseTableName
FROM OBJECTTYPES A
WHERE A.ID =
nIDOBjectType;
cSQLText := 'INSERT
INTO TEMPFOUNDOBJECTS (ID,OBJECTSERIAL,HIERARCHICALSERIAL,FUSEOBJECT) ' ||
'SELECT
ID,row_number() over (order by rnum) OBJECTSERIAL,row_number() over (order by
rnum) HIERARCHICALSERIAL,1 FROM (SELECT ';
IF cSQLText IS NOT
NULL THEN
-- hint for connect
sort and search tables
cSQLText :=
cSQLText || '/*+ USE_NL(M) */ '
|| vBaseTableName
|| '.ID, ROWNUM RNUM FROM ' || vBaseTableName || ',(' || cSQLText || ') M';
ELSE
cSQLText :=
cSQLText || vBaseTableName || '.ID, ROWNUM RNUM FROM ' || vBaseTableName;
END IF;
-- sorting
cSQLText :=
cSQLText || ' ORDER BY 1';
-- close query
cSQLText :=
cSQLText || ')';
RETURN cSQLText;
END;
function doSearch
(nIDObjectType NUMBER) return NUMBER as
cSQLCode CLOB;
BEGIN
cSQLCode :=
getQueryText(nIDObjectType);
-- execute search
query
EXECUTE IMMEDIATE
cSQLCode;
RETURN
SQL%ROWCOUNT;
END;
function
getSearchParamNum return NUMBER as
nSearchParamNum
NUMBER;
BEGIN
SELECT COUNT(*)
INTO nSearchParamNum FROM SEARCHPARAMETERS A;
RETURN
nSearchParamNum;
END;
function
getConditionType (nIdCondition NUMBER) return VARCHAR2 as
cValue
CONDITIONS.VALUE%TYPE;
BEGIN
SELECT C.VALUE INTO
cValue FROM CONDITIONS C WHERE C.ID = nIDCondition;
RETURN cValue;
EXCEPTION WHEN
NO_DATA_FOUND THEN
RETURN NULL;
END;
function
getFoundObjectNum return NUMBER as
nObjectsNum NUMBER;
BEGIN
SELECT COUNT(*)
INTO nObjectsNum
FROM TEMPFOUNDOBJECTS
A WHERE A.FUSEOBJECT = 1;
RETURN nObjectsNum;
END;
function
getFoundObjectNum (nIDObjectType NUMBER) return NUMBER as
nObjectsNum NUMBER;
BEGIN
SELECT
COUNT(*) INTO
nObjectsNum
FROM
tempfoundobjects
tf,
objects obj
WHERE
tf.id = obj.id
AND
obj.idobjecttype = nIDObjectType
AND tf.fuseobject =
1;
RETURN nObjectsNum;
END;
end SEARCHDATA;
/
Листинг пакета SECURITYDATA
Пакет SECURITYDATA
реализует политику тщательного контроля доступа, т.е. в зависимости от
контекста подключения, предоставляет пользователю на объект права владельца или
по умолчанию. Код заголовка пакета и комментарии к заголовку пакета (см.
таб.Пр.1.5.) ниже:
Таблица Пр.1.5. Комментарии к заголовку пакета SECURITYDATA.
номер строчки кодаКомментарии
|
|
3
|
Функция checkRights предназначена для динамического определения прав
вызывающего пользователя на объекты idObject.
|
4
|
Это перегруженная версия функции checkRights 3 строчки
кода. Необходима для ускоренного динамического определения прав вызывающего
пользователя на объекты idObject, для этого все параметры объекта должны быть определены
заранее.
|
SQL> CREATE OR
REPLACE PACKAGE SECURITYDATA
AS
FUNCTION
checkRights(idObject NUMBER) RETURN NUMBER;
FUNCTION
checkRights(idObject NUMBER, oright NUMBER, owner VARCHAR2, aright NUMBER)
RETURN NUMBER;
END SECURITYDATA;
/
created
Код тела
пакета
SECURITYDATA:
Таблица Пр.1.6. Комментарии к телу пакета SECURITYDATA.
номера строчки кодаКомментарии
|
|
5-21
|
Функция checkRights предназначена для динамического определения прав
вызывающего пользователя на объекты idObject. Строки 13-16:
если пользователь является владельцем объекта то функция возвращает права
владельца на объект. Строки 18-19: Иначе возвращаются права по умолчанию.
|
23-33
|
Это перегруженная версия функции checkRights 3 строчки кода.
Необходима для ускоренного динамического определения прав вызывающего
пользователя на объекты idObject, для этого все параметры объекта должны быть определены
заранее. Строки 27-29: если пользователь является владельцем объекта то
функция возвращает права владельца на объект. Строка 31: Иначе возвращаются
права по умолчанию.
|
SQL> CREATE OR
REPLACE PACKAGE BODY SECURITYDATA
AS
FUNCTION
checkRights(idObject NUMBER) RETURN NUMBER
AS
nRight
objectprivileges.id%TYPE;
vOwner
objects.owner%TYPE;
BEGIN
SELECT owner INTO
vOwner FROM objects WHERE id = idObject;
IF SYS_CONTEXT
('USERENV', 'SESSION_USER') = vOwner THEN
SELECT orights INTO
nRight FROM objects WHERE id = idObject;
RETURN nRight;
END IF;
SELECT arights INTO
nRight FROM objects WHERE id = idObject;
RETURN nRight;
END checkRights;
FUNCTION
checkRights(idObject NUMBER, oright NUMBER, owner VARCHAR2, aright NUMBER)
RETURN NUMBER
AS
BEGIN
IF SYS_CONTEXT
('USERENV', 'SESSION_USER')= owner THEN
RETURN oright;
END IF;
RETURN aright;
END checkRights;
END SECURITYDATA;
/
Приложение
2. Расширенный
список тестовых примеров
В таблице Пр2.1. приведены
тест-кейсы, которые проводились при разработке и тестировании базы данных.
Возможные приоритеты тест-кейсов в порядке убывания их статуса: Blocker, Critical, Major, Minor, Trivial.
К сожалению, ввиду относительно большого, проведенных тест-кейсов, здесь я
размещаю только тест-кейсы у которых относительный приоритет Major и выше.
Таблица Пр2.1. Test cases.
ID
|
Название
|
Цель
|
Среда выполнения
|
Пошаговое выполнение
|
Критерий выполнения
|
Приоритет
|
DB1
|
Поддержка
объектов на русском языке
|
Проверка создания, редактирования и удаления объектов на
русском языке.
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, в котором есть атрибуты на
русском языке. 2.Создать объект та-кого объектного типа. 3.Заполнить значения
атрибутов объектного типа литералами на русском языке. 4.Сохранить в БД. 5.
Выбрать этот объект из БД.
|
Наличие объектов и корректный вывод значений атрибутов
объекта на русском языке.
|
Blocker
|
DB2
|
Поддержка
объектов на английском языке
|
Проверка создания, редактирования и удаления объектов на
английском языке.
|
PL\SQL
Developer 7.1.5.1398
|
1. Выбрать объектный тип, в котором есть атрибуты на
английском языке. 2.Создать объект такого объектного типа. 3.Заполнить
значения атрибутов объектного типа литералами на английском языке.
4.Сохранить в БД. 5. Выбрать этот объект из БД.
|
Наличие объектов и корректный вывод значений атрибутов
объекта на английском языке.
|
Blocker
|
DB3
|
Поддержка
объектов на немецком языке
|
Проверка создания, редактирования и удаления объектов на
немецком язы-ках.
|
PL\SQL
Developer 7.1.5.1398
|
1. Выбрать объектный тип, в котором есть атрибуты на
немецком языке. 2.Создать объект такого объектного типа. 3.Заполнить значения
атрибутов объектного типа литералами на немецком языке. 4.Сохранить в БД. 5.
Выбрать этот объект из БД.
|
Наличие объектов и корректный вывод значений атрибутов
объекта на немецком языке.
|
Blocker
|
DB4
|
Поддержка
переключения работы информационной системы с русского на английский язык
|
Проверка функционирования переключения
работы информационной системы с русского на английский язык
|
Internet Explorer 6.0.
|
1. Установить в приложении русский язык. 2. Выбрать объект.
3.Переключиться на английский язык. 4. Выбрать объект.
|
Корректное отображение значений атрибутов объекта как
русском так и на английских языках
|
Critical
|
DB5
|
Поддержка
переключения работы информационной системы с английского на русский язык
|
Проверка функционирования переключения
ра-боты информа-ционной системы с русского на ан-глийский язык
|
PL\SQL Developer 7.1.5.1398
|
1. Установить в приложении английский язык. 2. Выбрать
объект. 3.Переключиться на русский язык. 4. Выбрать объект
|
Корректное отображение значений атрибутов объекта как
русском так и на английских языках
|
Critical
|
DB6
|
Поддержка
безязыково-го типа MULTILANG
|
Проверка функционирования безязыкового
типа MULTILANG
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, в котором есть атрибуты типа
данных MULTI-LANG. 2.Создать объект та-кого объектного типа. 3.Заполнить
значения атрибутов объектного типа. 4.Сохранить в БД. 5. Выбрать этот объект
из БД.
|
Наличие объектов и корректный вывод значения атрибута.
|
Major
|
DB7
|
Поддержка
аудита вставки нового объекта с атрибутом типа DATE
|
Поддержка
функционирования аудита на вставку нового объекта с атрибутом типа DATE
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
DATE. 2. Создать новый объект выбранного объектного типа.
3.Вывести аудит на атрибут, на объект и на выбранный объектный тип.
|
Наличие записи аудита о вставки в логе атрибута и объекта.
|
Major
|
DB8
|
Поддержка
аудита изменения объекта с атрибутом типа DATE
|
Поддержка
функционирования аудита на изменение объекта с атрибутом типа DATE
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
DATE. 2. Выбрать объект данного объектного типа. 3. Изменить
выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный
объект.
|
Наличие записи аудита о изменении в логе атрибута и
объекта.
|
Major
|
DB9
|
Поддержка
аудита удаления объекта с атрибутом типа DATE
|
Поддержка
функционирования аудита на удаление объекта с атрибутом типа DATE
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
DATE. 2. Выбрать объект данного объектного типа. 3. Удалить
выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный
объект.
|
Наличие записи аудита о удаление в логе атрибута и объекта.
|
Major
|
DB10
|
Поддержка
аудита вставки нового объекта с атрибутом типа CLOB
|
Поддержка
функционирования аудита на вставку нового объекта с атрибутом типа CLOB
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
CLOB.
2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на
атрибут, на объект и на выбранный объектный тип.
|
Наличие записи аудита о вставки в логе атрибута и объекта.
|
Major
|
DВ11
|
Поддержка
аудита изменения объекта с атрибутом типа CLOB
|
Поддержка
функционирования аудита на изменение объекта с атрибутом типа CLOB
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
CLOB.
2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о изменении в логе атрибута и объекта.
|
Major
|
DB12
|
Поддержка
аудита удаления объекта с атрибутом типа CLOB
|
Поддержка
функционирования аудита на удаление объекта с атрибутом типа CLOB
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
CLOB.
2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о удаление в логе атрибута и объекта.
|
Major
|
DB13
|
Поддержка
аудита вставки нового объекта с атрибутом типа DICTIONARY
|
Поддержка
функционирования аудита на вставку нового объекта с атрибутом типа DICTIONARY
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
CLOB.
2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на
атрибут, на объект и на выбранный объектный тип.
|
Наличие записи аудита о вставки в логе атрибута и объекта.
|
Major
|
DВ14
|
Поддержка
аудита изменения объекта с атрибутом типа DICTIONARY
|
Поддержка
функционирования аудита на изменение объекта с атрибутом типа DICTIONARY
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
DICTIONARY.
2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о изменении в логе атрибута и
объекта.
|
Major
|
DB15
|
Поддержка
аудита удаления объекта с атрибутом типа DICTIONARY
|
Поддержка
функционирования аудита на удаление объекта с атрибутом типа DICTIONARY
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
DICTIONARY.
2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о удаление в логе атрибута и объекта.
|
Major
|
DB16
|
Поддержка
аудита вставки нового объекта с атрибутом типа MULTILANG
|
Поддержка
функционирования аудита на вставку нового объекта с атрибутом типа MULTILANG
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
MULTILANG.
2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на
атрибут, на объект и на выбранный объектный тип.
|
Наличие записи аудита о вставки в логе атрибута и объекта.
|
Major
|
DВ17
|
Поддержка
аудита изменения объекта с атрибутом типа MULTILANG
|
Поддержка
функционирования аудита на изменение объекта с атрибутом типа MULTILANG
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
MULTILANG.
2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о изменении в логе атрибута и
объекта.
|
Major
|
DB18
|
Поддержка
аудита удаления объекта с атрибутом типа MULTILANG
|
Поддержка
функционирования аудита на удаление объекта с атрибутом типа MULTILANG
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
MULTILANG.
2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о удаление в логе атрибута и объекта.
|
Major
|
DB19
|
Поддержка
аудита вставки нового объекта с атрибутом типа NUMBER
|
Поддержка
функционирования аудита на вставку нового объекта с атрибутом типа NUMBER
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
NUMBER.
2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на
атрибут, на объект и на выбранный объектный тип.
|
Наличие записи аудита о вставки в логе атрибута и объекта.
|
Major
|
DВ20
|
Поддержка
аудита изменения объекта с атрибутом типа NUMBER
|
Поддержка
функционирования аудита на изменение объекта с атрибутом типа NUMBER
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
NUMBER.
2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о изменении в логе атрибута и
объекта.
|
Major
|
DB21
|
Поддержка
аудита удаления объекта с атрибутом типа NUMBER
|
Поддержка
функционирования аудита на удаление объекта с атрибутом типа NUMBER
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
NUMBER.
2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект.
4.Вывести аудит на атрибут, на объект и на выбранный объект.
|
Наличие записи аудита о удаление в логе атрибута и объекта.
|
Major
|
DB22
|
Поддержка
аудита вставки нового объекта с атрибутом типа VARCHAR2
|
Поддержка
функционирования аудита на вставку нового объекта с атрибутом типа VARCHAR2
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
VARCHAR2. 2. Создать новый объект выбранного объектного
типа. 3.Вывести аудит на атрибут, на объект и на выбранный объектный тип.
|
Наличие записи аудита о вставки в логе атрибута и объекта.
|
Major
|
DВ23
|
Поддержка
аудита изменения объекта с атрибутом типа VARCHAR2
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
VARCHAR2. 2. Выбрать объект данного объектного типа. 3.
Изменить выбранный объект. 4.Вывести аудит на атрибут, на объект и на
выбранный объект.
|
Наличие записи аудита о изменении в логе атрибута и
объекта.
|
Major
|
DB24
|
Поддержка
аудита удаления объекта с атрибутом типа VARCHAR2
|
Поддержка
функционирования аудита на удаление объекта с атрибутом типа VARCHAR2
|
PL\SQL Developer 7.1.5.1398
|
1. Выбрать объектный тип, который имеет атрибут типа данных
VARCHAR2. 2. Выбрать объект данного объектного типа. 3.
Удалить выбранный объект. 4.Вывести аудит на атрибут, на объект и на
выбранный объект.
|
Наличие записи аудита о удаление в логе атрибута и объекта.
|
Major
|
DB25
|
Проверка
права владельца на объект
|
Удостовериться,
что установив права владельца на объект равный 2 - владелец может
просматривать и изменять объект.
|
PL\SQL Developer 7.1.5.1398
|
1.Выбрать объект. 2.Установить orights равным 2.
3. Зайти в БД с логином владельца объекта. 4. Попытаться выбрать объект. 5.
Попытаться изменить объект.
|
Возможность просмотра и изменения объекта с логином
владельца.
|
Critical
|
DB26
|
Проверка
права владельца на объект
|
Удостовериться,
что установив права владельца на объект равный 1 - владелец может только
просматривать объект.
|
PL\SQL Developer 7.1.5.1398
|
1.Выбрать объект. 2.Установить orights равным 2.
3. Зайти в БД с логином владельца объекта. 4. Попытаться выбрать объект. 5.
Попытаться изменить объект.
|
Возможность просмотра и невозможность изменения объекта с
логином владельца.
|
Critical
|
DB27
|
Проверка
права владельца на объект
|
Удостовериться,
что установив права владельца на объект равный 0 - владелец не может
просматривать и изменять объект.
|
PL\SQL Developer 7.1.5.1398
|
1.Выбрать объект. 2.Установить orights равным 2.
3. Зайти в БД с логином владельца объекта. 4. Попытаться выбрать объект.
|
Невозможность просмотра и изменения объекта с логином
владельца.
|
Critical
|
DB28
|
Проверка
права по умолчанию на объект
|
Удостовериться,
что установив права по умолчанию на объект равный 2 - пользователь-невладелец
может просматривать и изменять объект.
|
PL\SQL Developer 7.1.5.1398
|
1.Выбрать объект. 2.Установить orights равным 2.
3. Зайти в БД с логином невладельца объекта. 4. Попытаться выбрать объект. 5.
Попытаться изменить объект.
|
Возможность просмотра и изменения объекта с логином
невладельца.
|
Critical
|
DB29
|
Проверка
права по умолчанию на объект
|
Удостовериться,
что установив права по умолчанию на объект равный 1 - пользователь-невладелец
может только просматривать объект.
|
PL\SQL Developer 7.1.5.1398
|
1.Выбрать объект. 2.Установить orights равным 2.
3. Зайти в БД с логином невладельца объекта. 4. Попытаться выбрать объект. 5.
Попытаться изменить объект.
|
Возможность просмотра и невозможность изменения объекта с
логином невладельца.
|
Critical
|
DB30
|
Проверка
права по умолчанию на объект
|
Удостовериться,
что установив права по умолчанию на объект равный 0 - пользователь-невладелец
не может просматривать и изменять объект.
|
PL\SQL Developer 7.1.5.1398
|
1.Выбрать объект. 2.Установить orights равным 2.
3. Зайти в БД с логином невладельца объекта. 4. Попытаться выбрать объект.
|
Невозможность просмотра и изменения объекта с логином
невладельца.
|
Critical
|