无法接收程序中输入的数据。 Oracle SQL Developer中
我有2种类型:无法接收程序中输入的数据。 Oracle SQL Developer中
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。我还应该从CasesList_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
如果您在sqlplus运行它,你应该先给SET SERVEROUTPUT ON
启用打印。
如果您在另一个客户端运行此操作,则必须检查SERVEROUTPUT是否在您的环境中启用;客户端和客户端的方式不同。
不客气。 [Here](http://stackoverflow.com/help/someone-answers)你可以找到更多的东西来回答你的问题。 – Aleksej
谢谢! 我修改了你的代码,它现在可以工作了! – LameDancer
因此,这是工作代码。
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;
这应该有效。你如何调用程序并检查结果? – Aleksej
我只需按下RUN按钮。并设置“IN”参数: – LameDancer