那麼,今天我看到它的時候,我怎麼能問這個問題。這是錯誤的。 然後我對PLSQL沒有太多的瞭解,並沒有太多的閱讀問這個問題。無論如何,有很多方法可以解決這個問題,正如我在評論中提到的那樣,可以發回一個關聯數組,但是如果您不知道預期結果的數量,那麼這對於java來說是一種痛苦。或者可以創建一個與用戶定義對象的嵌套數組像這樣:
CREATE OR REPLACE TYPE keyvalue AS object (col Number(10), col2 VARCHAR2(30));
CREATE OR replace TYPE map IS TABLE OF keyvalue ;
聽到我是怎麼做到的。您不能向光標添加列,但可以創建自己的自定義數據類型。
CREATE OR REPLACE TYPE dbObject AS OBJECT
(
empId NUMBER (6),// here add as many fields you want to return or want your object to have
emailId VARCHAR2 (25),
hiredate DATE
);
CREATE OR REPLACE TYPE datalist IS TABLE OF DBOBJECT;
PROCEDURE get_emp_data (list OUT datalist)
AS
CURSOR emp_cursor
IS
SELECT employee_id AS empId,
EMPLOYEES.EMAIL AS emailId,
EMPLOYEES.HIRE_DATE AS hiring
FROM EMPLOYEES;
c_datatype emp_cursor%rowtype;
BEGIN
OPEN emp_cursor();
list := datalist();
LOOP
fetch emp_cursor into c_datatype;
EXIT WHEN emp_cursor%NOTFOUND;
list.extend;
list(emp_cursor%ROWCOUNT):=DBOBJECT(c_datatype.empId,c_datatype.emailId,c_datatype.hiring);
END LOOP;
END get_emp_data;
現在你想從Java調用這樣的:這裏是代碼:
String dataTypeName = "DBOBJECT";
String dataTypeListName = "datalist";
StructDescriptor structDescriptor = StructDescriptor.createDescriptor(dataTypeName.toUpperCase(), connection);
ResultSetMetaData metaData = structDescriptor.getMetaData();
CallableStatement cs = connection.prepareCall("{call TEST_PACKAGE.get_emp_data(?)}");
cs.registerOutParameter(1, OracleTypes.ARRAY, dataTypeListName.toUpperCase());
cs.execute();
Object[] data = (Object[]) ((Array)cs.getObject(1)).getArray();
for(Object tmp : data) {
Struct row = (Struct) tmp;
int index = 1;
for(Object attribute : row.getAttributes()) {
System.out.println(metaData.getColumnName(index) + " : " + attribute);
++index ;
}
}
cs.close();
有手冊中的例子來說明如何通過JDBC返回結果集。此外,在存儲過程結束後,結果集將定位在最後一行之後,因此它實際上是用途。可能是你想要的是在遊標的「SELECT」列表中調用'GET_MORE_DATA()'。 – mustaccio
@mustaccio你能指點我參考的例子嗎?並且我從光標搜索關於調用函數,但函數將empId作爲Input參數和部門的一些值以及我將如何將它添加到一行中? – Kid101
@mustaccio我在想什麼,除了遊標作爲輸出參數外,我還可以發送一個帶有key的關聯數組作爲我的empid和value,就像我從GET_MORE_DATA得到的一樣。現在如何在JDBC中使用JDBC檢索這些值?我應該從這個還是什麼提出一個新問題? – Kid101