Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从输入程序接收数据。Oracle SQL开发人员_Oracle_Oracle Sqldeveloper - Fatal编程技术网

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;

这应该行得通。如何调用该过程并检查结果?我只需按“运行”按钮。并设置“输入”参数:不客气。当有人回答你时,你会发现更多关于该怎么做的事情。