create or replace procedure create_Mapping_RELATION(
PROJECT_LIST IN PROJECT_MAPPING_TABLE_LIST,
COST_LIST IN COST_MAPPING_TABLE_LIST,
BGSCHEME_VALUE IN BGSCHEME_LIST
)
AS--定义接收对象
PROJECTLIST PROJECT_LIST;
COSTLIST COST_LIST;
BGSCHEMELIST BGSCHEME_VALUE;
isType varchar2(100);
BEGIN
for i in 1..BGSCHEME_VALUE.COUNT LOOP--外层循环为控制策略集合
    --取得BGSCHEME_VALUE各列的值
    for j in 1..COST_LIST.COUNT LOOP --第二层循环为费用类型映射表集合
        for k in 1..PROJECT_LIST.COUNT LOOP --第三层循环为项目映射关系表集合
            PROJECTLIST := PROJECT_LIST(k);--获取项目映射表集合
            COSTLIST := COST_LIST(j);--获取费用类型映射表集合
           -- BGSCHEMELIST := BGSCHEME_VALUE(i);--获取控制策略集合
                                    COSTLIST.COST_TYPE :=   isType;
               IF PROJECT_LIST(k)=NULL  THEN
                       insert into  CT_MAP_MappingRelationEntry(
                         FID,
                         CFCOSTTYPENUMBER,
                         CFCOSTTYPE,
                         CFBUDGETPROJECTNUMBER,
                         CFBUDGETNAME,
                         CFBUDGETPROJECT,
                         CFBUDGETCOSTTYPE,
                         CFPROJECTRID,
                         CFCOSTRID,
                         CFBGCONTROLSCHEMENUMBER,
                         CFBGCONTROLSCHEMEID,
                         CFBILLITEMCOMBINALIAS,
                         CFISTYPE,
                         CFBGCONTROLSCHEME,
                         CFENTRYSTATE) values(
                         newbosid('E62122E2'),
                         COSTLIST.DOCUMENT_COST_NUMBER,
                         COSTLIST.DOCUMENT_COST_NAME,
                         COSTLIST.BUDGET_PROJECT_NUMBER||'_'||PROJECTLIST.BUDGET_PROJECT_NUMBER,
                         COSTLIST.BUDGET_PROJECT_NAME||'_'||PROJECTLIST.BUDGET_PROJECT_NAME,
                         PROJECTLIST.BUDGET_PROJECT_NUMBER,
                         COSTLIST.BUDGET_PROJECT_NUMBER,
                         PROJECTLIST.PROJECT_RID,
                         COSTLIST.COST_RID,
                          IF isType = '1'  THEN --如果为1等于费用管理
                          'entries.expenseType.number:'||COSTLIST.DOCUMENT_COST_NUMBER,
                          'entries.expenseType.number',
                          'entries.expenseType.number:'||COSTLIST.DOCUMENT_COST_NAME,
                          '1',
                           BGSCHEMELIST := BGSCHEME_VALUE(i),
                            '3');
                           ELSIF isType = '2'  THEN --如果为2等于总账
                           'entries.account.number:'||COSTLIST.DOCUMENT_COST_NUMBER,
                           'entries.account.number',
                           'entries.account.number:'||COSTLIST.DOCUMENT_COST_NAME,
                           '2',
                            BGSCHEMELIST := BGSCHEME_VALUE(i),                            '3');
                            END IF        ELSE
             insert into  CT_MAP_MappingRelationEntry(
                         FID,
                         CFCOSTTYPENUMBER,
                         CFCOSTTYPE,
                         CFPROJECTNUMBER,
                         CFPROJECT,
                        CFBUDGETPROJECTNUMBER,
                         CFBUDGETNAME,
                         CFBUDGETPROJECT,
                         CFBUDGETCOSTTYPE,
                         CFPROJECTRID,
                         CFCOSTRID,
                         CFBGCONTROLSCHEMENUMBER,
                         CFBGCONTROLSCHEMEID,
                         CFBILLITEMCOMBINALIAS,
                         CFISTYPE,
                         CFBGCONTROLSCHEME,
                         CFENTRYSTATE) values(
                         newbosid('E62122E2'),
                         COSTLIST.DOCUMENT_COST_NUMBER,
                         COSTLIST.DOCUMENT_COST_NAME,
                         PROJECTLIST.DOCUMENT_PROJECT_NUMBER,
                         PROJECTLIST.DOCUMENT_PROJECT_NAME,
                         COSTLIST.BUDGET_PROJECT_NUMBER||'_'||PROJECTLIST.BUDGET_PROJECT_NUMBER,
                         COSTLIST.BUDGET_PROJECT_NAME||'_'||PROJECTLIST.BUDGET_PROJECT_NAME,
                         PROJECTLIST.BUDGET_PROJECT_NUMBER,
                         COSTLIST.BUDGET_PROJECT_NUMBER,
                         PROJECTLIST.PROJECT_RID,
                         COSTLIST.COST_RID,                          IF isType = '1' THEN --如果为1等于费用管理
                          'entries.expenseType.number:'||COSTLIST.DOCUMENT_COST_NUMBER||'|entries.project.number:'||PROJECTLIST.DOCUMENT_PROJECT_NUMBER,
                          'entries.expenseType.number|entries.project.number',
                           'entries.expenseType.number:'||COSTLIST.DOCUMENT_COST_NAME||'|entries.project.number:'||PROJECTLIST.DOCUMENT_PROJECT_NAME,
                          '1',
                           BGSCHEMELIST := BGSCHEME_VALUE(i),
                          '3');                           ELSIF isType = '2' THEN --如果为2等于总账
                           'entries.account.number:'||COSTLIST.DOCUMENT_COST_NUMBER||'|entries.assistRecords.assGrp.project.number:'||PROJECTLIST.DOCUMENT_PROJECT_NUMBER,
                           'entries.account.number|entries.assistRecords.assGrp.project.number',
                            'entries.account.number:'||COSTLIST.DOCUMENT_COST_NAME||'|entries.assistRecords.assGrp.project.number:'||PROJECTLIST.DOCUMENT_PROJECT_NAME,
                           '2',
                            BGSCHEMELIST := BGSCHEME_VALUE(i),
                            '3');
                            END IF             END IF
               END LOOP
       END LOOP
END LOOP
END;
END create_Mapping_RELATION

解决方案 »

  1.   

    你的insert里面的if语句怎么一半写在insert里面,另一半没写造成的语句执行过程报错吧
      

  2.   

                              IF isType = '1'  THEN --如果为1等于费用管理                          'entries.expenseType.number:'||COSTLIST.DOCUMENT_COST_NUMBER,
                              'entries.expenseType.number',
                              'entries.expenseType.number:'||COSTLIST.DOCUMENT_COST_NAME,
                              '1',
                               BGSCHEMELIST := BGSCHEME_VALUE(i),
                                '3');
                               ELSIF isType = '2'  THEN --如果为2等于总账
                               'entries.account.number:'||COSTLIST.DOCUMENT_COST_NUMBER,
                               'entries.account.number',
                               'entries.account.number:'||COSTLIST.DOCUMENT_COST_NAME,
                               '2',
                                BGSCHEMELIST := BGSCHEME_VALUE(i),                            '3');
                                END IF
    INSERT 语句中,怎么还出现了 IF 语句,这是要做什么呢?
      

  3.   

    insert into t(col_name)
    values(
    case when isType = '1'  then '1111' 
              when isType ='2' then '2222'
              else '33333'
    end)