Сегмент кода для оракула, чтобы вызвать proc, где мы используем переменные типа в качестве входного параметра.
1 - При таком подходе мы могли бы вызвать proc параметра входного типа.
CREATE OR REPLACE TYPE callbck AS TABLE OF callback_t;
CREATE OR REPLACE TYPE CALLBACK_T AS OBJECT
(
p_grading_id NUMBER,
p_name VARCHAR2 (500),
p_value VARCHAR2 (500)
);
CREATE TABLE CALLBACK_T_temp
(
p_grading_id NUMBER,
p_name VARCHAR2 (500),
p_value VARCHAR2 (500)
);
CREATE OR REPLACE PROCEDURE log_errors (p_error_message IN callbck)
AS
BEGIN
INSERT INTO CALLBACK_T_temp
SELECT *
FROM TABLE (p_error_message) COMMIT;
END;
/
SELECT * FROM CALLBACK_T_temp;
COMMIT;
DECLARE
P_ERROR_MESSAGE callbck;
BEGIN
P_ERROR_MESSAGE :=
callbck (CALLBACK_T (1, 'name1', 'value1'),
CALLBACK_T (1, 'name2', 'value2'),
CALLBACK_T (1, 'name3', 'value3'));
CRADLE_DEV_ENV11_O.LOG_ERRORS (P_ERROR_MESSAGE);
COMMIT;
END;
SELECT * FROM CALLBACK_T_temp;
TRUNCATE TABLE CALLBACK_T_temp;
2 - это еще один подход, с помощью которого мы можем вызывать proc для параметра входного типа.
CREATE TABLE temp
(
p_grading_id NUMBER,
p_name VARCHAR2 (500),
p_value VARCHAR2 (500)
);
INSERT INTO temp
VALUES (1, 'name1', 'value1');
INSERT INTO temp
VALUES (1, 'name2', 'value2');
INSERT INTO temp
VALUES (1, 'name3', 'value3');
COMMIT;
SELECT * FROM temp;
DECLARE
P_ERROR_MESSAGE callbck;
BEGIN
SELECT CALLBACK_T (e.p_grading_id, e.p_name, e.p_value)
BULK COLLECT INTO P_ERROR_MESSAGE
FROM temp e;
CRADLE_DEV_ENV11_O.LOG_ERRORS (P_ERROR_MESSAGE);
END;
/
SELECT * FROM CALLBACK_T_temp;
TRUNCATE TABLE CALLBACK_T_temp;
3- При таком подходе мы можем вызывать proc для параметра входного типа, но тип объекта внутри типа объекта.
CALLING OBJECT INSIDE OBJECT
**DECLARE
P_VALUES P_OBJECT;
BEGIN
P_VALUES :=
P_OBJECT (
1000,
name_value_table (name_value_object ('NAME1', 'VALUE1'),
name_value_object ('NAME2', 'VALUE2'),
name_value_object ('NAME3', 'VALUE3')));
PKG.PROC (P_VALUES);
COMMIT;
END**;
Так есть ли другой способ, которым мы могли бы вызвать процедуру входного параметра как тип.