PL/SQL returns table 查询的包函数
PL/SQL Package Function that returns table querying
我正在尝试:制作具有从另一个 table 获取数字和 returns table 的功能的包。然后查询这个。我已经编译了所有类型而没有错误,但是在查询时出现无效数据类型错误。
对于代码中的非英语单词,我深表歉意。
我有 table "Pasutijumi" 类型的对象 T_Pasutijums:
Create or Replace Type T_Pasutijums As Object(
Pasutijums_ID integer,
Klients_ID integer,
Soferis_ID integer,
Prece varchar2(20),
Cena number,
Daudzums integer,
Statuss varchar2(12));
然后是包装说明:
Create or Replace package Pakete_1 As
Type Pasutijums_filtrets Is Record(
Pasutijums_ID integer,
Klients_ID integer,
Soferis_ID integer,
Prece varchar2(20),
Cena number,
Daudzums integer,
Statuss varchar2(12),
Gala_Cena number);
Type Pasutijumi_filtreti Is Table Of Pasutijums_filtrets;
Function Filtret_Pasutijumus(Gala_Cena number) return Pasutijumi_filtreti;
End Pakete_1;
和包体:
create or replace
Package Body Pakete_1 As
Function Filtret_Pasutijumus(Gala_Cena number) return Pasutijumi_filtreti Is
Cursor Kursors1 Is
Select A.Pasutijums_ID, A.Klients_ID, A.Soferis_ID, A.Prece, A.Cena,
A.Daudzums, A.Statuss, A.Cena*A.Daudzums
From Pasutijumi A
Where A.Statuss!='NORAIDITS' And A.Cena*A.Daudzums>=Gala_Cena;
Pasutijumi_table Pasutijumi_filtreti;
Begin
Open Kursors1;
Loop
Fetch Kursors1 Bulk Collect Into Pasutijumi_table;
Exit When Kursors1%NOTFOUND;
End Loop;
Close Kursors1;
return Pasutijumi_table;
End;
End;
但是当我尝试查询时:
Select *
From table(pakete_1.filtret_pasutijumus(20));
我收到 SQL 错误:ORA-00902:无效数据类型。这里有什么问题?
为了 SQL 可以访问记录和 table 类型,它们必须是数据库对象,而不是包声明。
create or replace Type Pasutijums_filtrets Is Object(
Pasutijums_ID integer,
Klients_ID integer,
Soferis_ID integer,
Prece varchar2(20),
Cena number,
Daudzums integer,
Statuss varchar2(12),
Gala_Cena number);
create or replace Type Pasutijumi_filtreti Is Table Of Pasutijums_filtrets;
Create or Replace package Pakete_1 As
Function Filtret_Pasutijumus(Gala_Cena number) return Pasutijumi_filtreti;
End Pakete_1;
我正在尝试:制作具有从另一个 table 获取数字和 returns table 的功能的包。然后查询这个。我已经编译了所有类型而没有错误,但是在查询时出现无效数据类型错误。 对于代码中的非英语单词,我深表歉意。
我有 table "Pasutijumi" 类型的对象 T_Pasutijums:
Create or Replace Type T_Pasutijums As Object(
Pasutijums_ID integer,
Klients_ID integer,
Soferis_ID integer,
Prece varchar2(20),
Cena number,
Daudzums integer,
Statuss varchar2(12));
然后是包装说明:
Create or Replace package Pakete_1 As
Type Pasutijums_filtrets Is Record(
Pasutijums_ID integer,
Klients_ID integer,
Soferis_ID integer,
Prece varchar2(20),
Cena number,
Daudzums integer,
Statuss varchar2(12),
Gala_Cena number);
Type Pasutijumi_filtreti Is Table Of Pasutijums_filtrets;
Function Filtret_Pasutijumus(Gala_Cena number) return Pasutijumi_filtreti;
End Pakete_1;
和包体:
create or replace
Package Body Pakete_1 As
Function Filtret_Pasutijumus(Gala_Cena number) return Pasutijumi_filtreti Is
Cursor Kursors1 Is
Select A.Pasutijums_ID, A.Klients_ID, A.Soferis_ID, A.Prece, A.Cena,
A.Daudzums, A.Statuss, A.Cena*A.Daudzums
From Pasutijumi A
Where A.Statuss!='NORAIDITS' And A.Cena*A.Daudzums>=Gala_Cena;
Pasutijumi_table Pasutijumi_filtreti;
Begin
Open Kursors1;
Loop
Fetch Kursors1 Bulk Collect Into Pasutijumi_table;
Exit When Kursors1%NOTFOUND;
End Loop;
Close Kursors1;
return Pasutijumi_table;
End;
End;
但是当我尝试查询时:
Select *
From table(pakete_1.filtret_pasutijumus(20));
我收到 SQL 错误:ORA-00902:无效数据类型。这里有什么问题?
为了 SQL 可以访问记录和 table 类型,它们必须是数据库对象,而不是包声明。
create or replace Type Pasutijums_filtrets Is Object(
Pasutijums_ID integer,
Klients_ID integer,
Soferis_ID integer,
Prece varchar2(20),
Cena number,
Daudzums integer,
Statuss varchar2(12),
Gala_Cena number);
create or replace Type Pasutijumi_filtreti Is Table Of Pasutijums_filtrets;
Create or Replace package Pakete_1 As
Function Filtret_Pasutijumus(Gala_Cena number) return Pasutijumi_filtreti;
End Pakete_1;