如何在sql过程中循环数组中的对象



创建的类型:

create or replace TYPE BE_OBJ_TYP AS OBJECT
( 
BE_TRNID VARCHAR2(32),
BE_LOGTIMESTMP TIMESTAMP(6),
BE_SERVID INTEGER,
BE_MSGTYP VARCHAR2(30),
BE_REQID VARCHAR2(32),
BE_SRCSYS VARCHAR2(10),
BE_DSTSYS VARCHAR2(10),
BE_ENTEXT VARCHAR2(5),
BE_MSGDIR VARCHAR2(3),
BE_ERRCODE VARCHAR(10),
BE_MW_TRNS_ID VARCHAR2(32),
BE_REQ_TYP VARCHAR2(3),
BE_TOT_LAT DECIMAL,
BE_BACKEND_LAT DECIMAL,
VE_PAY_REF VARCHAR2(10)
);

create or replace type OBJTYPLIST as varray(10) of BE_OBJ_TYP

禁止程序如下:

create or replace PROCEDURE TEST1PROC(TRANSID VARCHAR2 ,MSGTYP varchar2 ,TOTAL_LATENCY varchar2,aa in OBJTYPLIST)
AS
    BB BE_OBJ_TYP;
    ACount integer;
    SerId VARCHAR2(20);
    BESerId varchar(20);
    TS TIMESTAMP := current_timestamp ;
    BEGIN 
      select service_id into serid from service_metadata where service_name= msgtyp ;
      insert into ashutoshlog(transactionid,log_timestamp,service_id, messagetype, total_latency) 
      values(TRANSID,TS,SerId,MSGTYP,TOTAL_LATENCY );  
      commit;
        for BB in aa loop
        select be_service_id into beserid from backend_service_metadata where be_service_name=bb.BE_MSGTYP;
        dbms_output.put_line('Done till here');
        insert into soadetaillog(transactionid, service_id, be_service_id, latency) values(TRANSID,SerId,beserid,bb.BE_BACKEND_LAT);
        --insert into BE_SERVICE_DETAILS(messagetype,total_latency, versionnum) values (bb(1),bb(2),bb(3));
        dbms_output.put_line('Inserted');
        commit;
       end loop;  
    END;

我不知道锄头在aa里面循环BB。表示如何遍历数组的每个对象。我在这里尝试过"for BB in aa"命令。但不起作用。有人能提出建议吗。

您必须将其从第一个索引LOOP集合中的元素总数。。

  1. 第一个索引可以直接称为1。。或COLLECTIONNAME.FIRST
  2. 可以使用COLLECTIONNAME.LAST引用元素的总数

然后集合中的每一行都必须由COLLECTIONNAME(INDEX)访问。COLUMN_NAME

示例:AA(INDEX).BE_TOT_LAT

    for idx in 1..aa.COUNT loop
    select be_service_id into beserid from backend_service_metadata where be_service_name=aa(idx).BE_MSGTYP;
    dbms_output.put_line('Done till here');
    insert into soadetaillog(transactionid, service_id, be_service_id, latency) values(TRANSID,SerId,beserid,aa(idx).BE_BACKEND_LAT);
    --insert into BE_SERVICE_DETAILS(messagetype,total_latency, versionnum) values (aa(idx).BE_MSGTYP,aa(idx).BE_TOT_LAT,aa(idx).);
    dbms_output.put_line('Inserted');
    commit;
   end loop;  

最新更新