Oracle调用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**;
还有其他方法可以将输入参数的过程称为类型。