Can';t从输入程序接收数据。Oracle SQL开发人员
我有两种类型:Can';t从输入程序接收数据。Oracle SQL开发人员,oracle,oracle-sqldeveloper,Oracle,Oracle Sqldeveloper,我有两种类型: create or replace type CASES_TYPE_N IS object( CASEID VARCHAR2(128), FirstNumber VARCHAR2(32), DLR number ); create or replace TYPE CASES_TABLE_N AS TABLE OF CASES_TYPE_N; 并用它的身体包装: create or replace PACKAGE BANKRUPT_TEST
create or replace
type CASES_TYPE_N IS object(
CASEID VARCHAR2(128),
FirstNumber VARCHAR2(32),
DLR number
);
create or replace
TYPE CASES_TABLE_N AS TABLE OF CASES_TYPE_N;
并用它的身体包装:
create or replace
PACKAGE BANKRUPT_TEST AS
procedure BANKRUPT_TEST_p(
pType in integer,
pRequestDate in varchar2,
CasesList_1 out CASES_TABLE_N,
ResultCode out integer,
ErrorText out varchar2);
END BANKRUPT_TEST;
create or replace
PACKAGE BODY BANKRUPT_TEST AS
procedure BANKRUPT_TEST_p(
pType in integer,
pRequestDate in varchar2,
CasesList_1 out CASES_TABLE_N,
ResultCode out integer,
ErrorText out varchar2) AS
BEGIN
ResultCode := pType;
ErrorText := pRequestDate;
select CASES_TYPE_N(CaseID,
FirstNumber,
dlr
) bulk collect
into CasesList_1
from ( select
'CaseID' as CaseID,
'Fnum' as FirstNumber,
15 as dlr
from dual
)
;
NULL;
END BANKRUPT_TEST_p;
END BANKRUPT_TEST;
所有这些都是由Oracle SQL Developer编写和运行的。因此,我只接收变量ResultCode和ErrorText。我还应该有来自案例列表1的数据。但我没有。 我没有收到任何编译错误。 它必须使用类型,而不是游标。
您能帮忙吗?您可以用一个小的PLSQL块调用您的过程;例如,以下程序运行您的过程并打印结果:
declare
p1_in integer := 10;
p2_in varchar2(10) := 'xxx';
p1_out CASES_TABLE_N;
p2_out integer;
p3_out varchar2(10);
begin
BANKRUPT_TEST.BANKRUPT_TEST_p(
pType => p1_in ,
pRequestDate => p2_in ,
CasesList_1 => p1_out ,
ResultCode => p2_out ,
ErrorText => p3_out
);
if p1_out.count > 0 then
for i in p1_out.first .. p1_out.last loop
dbms_output.put_line(i || ' - ' ||
p1_out(i).caseId || ' - ' ||
p1_out(i).firstNumber || ' - ' ||
p1_out(i).dlr
);
end loop;
end if;
dbms_output.put_line(p2_out);
dbms_output.put_line(p3_out);
end;
1 - CaseID - Fnum - 15
10
xxx
结果是:
declare
p1_in integer := 10;
p2_in varchar2(10) := 'xxx';
p1_out CASES_TABLE_N;
p2_out integer;
p3_out varchar2(10);
begin
BANKRUPT_TEST.BANKRUPT_TEST_p(
pType => p1_in ,
pRequestDate => p2_in ,
CasesList_1 => p1_out ,
ResultCode => p2_out ,
ErrorText => p3_out
);
if p1_out.count > 0 then
for i in p1_out.first .. p1_out.last loop
dbms_output.put_line(i || ' - ' ||
p1_out(i).caseId || ' - ' ||
p1_out(i).firstNumber || ' - ' ||
p1_out(i).dlr
);
end loop;
end if;
dbms_output.put_line(p2_out);
dbms_output.put_line(p3_out);
end;
1 - CaseID - Fnum - 15
10
xxx
如果在SQLPLUS中运行此功能,则应首先启用SET SERVEROUTPUT ON
,以启用打印
如果您在不同的客户机上运行,则必须检查您的环境中是否启用了SERVEROUTPUT;客户端之间的方式不同。因此,这是工作代码
create or replace
procedure BANKRUPT_TEST_p1(
pType in integer,
in varchar2,
CasesList_1 out CASES_TABLE_N,
ResultCode out integer,
ErrorText out varchar2) IS
nCur number;
BEGIN
ResultCode := pType;
ErrorText := pRequestDate;
begin
CasesList_1:=CASES_TABLE_N();
exception when others then null;
end;
for rec in(
select distinct CaseID,
FirstNumber,
DLR
from AA_TABLE
where DownloadDate = pRequestDate and ClientID is not null
) loop
CasesList_1.extend;
nCur := CasesList_1.last;
CasesList_1(nCur) := CASES_TYPE_N(null, null, null);
begin
CasesList_1(nCur).CASEID := rec.caseid;
exception when others then null;
end;
begin
CasesList_1(nCur).FirstNumber := rec.firstnumber;
exception when others then null;
end;
begin
CasesList_1(nCur).DLR := rec.dlr;
exception when others then null;
end;
end loop;
NULL;
END BANKRUPT_TEST_p1;
END BANKRUPT_TEST1;
这应该行得通。如何调用该过程并检查结果?我只需按“运行”按钮。并设置“输入”参数:不客气。当有人回答你时,你会发现更多关于该怎么做的事情。