如何使用自定义对象作为输入参数调用Oracle存储过程

时间:2018-01-25 10:37:15

标签: java oracle object stored-procedures

在Oracle数据库中,我定义了类型:

create or replace TYPE person_type
    AS OBJECT (id NUMBER(10), name VARCHAR2(50), age NUMBER);

和存储过程

create or replace PROCEDURE add_person (in_person IN person_type)
AS
BEGIN
  INSERT into person (id, name, age) VALUES(in_person.id, in_person.name, person.age);
END;

我正在使用带有Hibernate的Spring Boot,我想用一些等效的java bean作为输入参数来调用该过程。 我见过很多例子,但他们只使用基本类型,而不是组合对象。 还有一些使用Table注释的示例,但我不保证在数据库中有这样的表,我只保证存储过程类型。

1 个答案:

答案 0 :(得分:0)

您需要StructDescriptor来获取SQL结构化对象,然后需要传递给STRUCT来创建类型。

require 'yaml' # this should be the value of bucket if you don't inspect it array = YAML.load("---\n- something something\n") # => ["something something"] array.join(' ') # or first or join with whatever else, deal with it how you want # => "something something" 中,您需要传递SQL对象名称,即StructDescriptor和连接对象,即PERSON_TYPE

con

然后,将结构描述符和对象数组传递给struct。请注意,数组索引表示它的序列/位置,它在SQL对象上声明它(SQL对象)的方式。由于StructDescriptor StructDesc = StructDescriptor.createDescriptor("PERSON_TYPE", con); 是第一个,然后是id,然后是name

age

现在,使用struct对象,您可以调用您的过程

Object[] ObjArray = new Object[3];
ObjArray[0] = 1;
ObjArray[1] = "My Name";
ObjArray[2] = 23;

STRUCT structObj = new STRUCT(StructDesc, con, ObjArray);