如何在oracle中将输入参数作为类型调用过程?

时间:2019-03-12 10:43:46

标签: sql oracle plsql user-defined-types

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**;

还有其他方法可以将输入参数的过程称为类型。

0 个答案:

没有答案