下面这个方法的返回值mytabletype在那里定义啊?
create or replace function testrerecordnotabname (tableid in number)
return mytabletype
定义就是下面的,这个定义放哪里啊?放在方法的头上吗???
create or replace type myobjectype as object (x int,y date,z varchar2(50));
create or replace type mytabletype as table of myobjectype
还有我有一个过程想接受这个方法返回的type类型,并且传递到客户端
create or replace procedure proc1(
tablenn OUT type)
)as
begin
tablenn :=testrerecordnotabname(2);
end;
这个代码好像不行,请高手指教!
create or replace function testrerecordnotabname (tableid in number)
return mytabletype
定义就是下面的,这个定义放哪里啊?放在方法的头上吗???
create or replace type myobjectype as object (x int,y date,z varchar2(50));
create or replace type mytabletype as table of myobjectype
还有我有一个过程想接受这个方法返回的type类型,并且传递到客户端
create or replace procedure proc1(
tablenn OUT type)
)as
begin
tablenn :=testrerecordnotabname(2);
end;
这个代码好像不行,请高手指教!
select testrerecordnotabname(2) into temp from dual;
create or replace function testrerecordnotabname (tableid in number)
return mytabletype
定义就是下面的,这个定义放哪里啊?放在方法的头上吗???
create or replace type myobjectype as object (x int,y date,z varchar2(50));
create or replace type mytabletype as table of myobjectype 定义的类型myobjectype和mytabletype放在你自定义的包中。create or replace package my_package is
create or replace type myobjectype as object (x int,y date,z varchar2(50));
create or replace type mytabletype as table of myobjectype
end;
还有我有一个过程想接受这个方法返回的type类型,并且传递到客户端
create or replace procedure proc1(
tablenn OUT type)
)as
begin
tablenn :=testrerecordnotabname(2); --因为你的testrerecordnotabname返回的是一个包含myobjectype对象的一个表,所以你可以在这里输出该表中的所有字段值。
for i in 1..tablenn.count loop
dbms_output.put_line(tablenn(i).x);
dbms_output.put_line(tablenn(i).y);
dbms_output.put_line(tablenn(i).z);
end loop;
end;
你说的tablenn这个传递到客户端是怎么回事?你指的是在java或c中获取这个自定义的表中的所有object吗?
SQL> create or replace type myobjectype as object (x int,y date,z varchar2(50));
2 /类型已创建。SQL> create or replace type mytabletype as table of myobjectype;
2 /类型已创建。SQL> create or replace function testrerecordnotabname (tableid in number)
2 return mytabletype
3 is
4 v_mt mytabletype;
5 begin
6 v_mt := mytabletype();
7 v_mt.extend;
8 v_mt(1) :=myobjectype(tableid,sysdate,'100');
9 return v_mt;
10 end;
11 /函数已创建。SQL>
SQL> create or replace procedure proc1(
2 tablenn OUT mytabletype
3 )as
4 begin
5 tablenn :=testrerecordnotabname(2);
6 end;
7 /过程已创建。SQL>
SQL> declare t mytabletype;
2 begin
3 proc1(t);
4 DBMS_OUTPUT.PUT_LINE(t(1).x);
5 DBMS_OUTPUT.PUT_LINE(t(1).y);
6 DBMS_OUTPUT.PUT_LINE(t(1).z);
7 end;
8 /
2
24-1月 -10
100PL/SQL 过程已成功完成。SQL>
类型定义应该放到方法得外边。先定义后使用。接收返回值得形式就和你写得一样。记得tablenn 得类型要和testrerecordnotabname函数返回得类型一致。
OraDataBase.Parameters("P_CURSOR").ServerType = 102
Set OraSqlStmt = OraDatabase.CreateSQL("Begin proc1(:P_CURSOR); end;",2)
Set OraDynaset = OraDatabase.Parameters("P_CURSOR").value
这里的ServerType =102是指游标,如果是自定义类型是多少啊?
tablenn OUT mytabletype)
OraDataBase.Parameters("P_CURSOR").ServerType
里面是否有自定义类型的对应值。
游标定义在begin前