错误 00904。00000 - 在 plsql 中"%s: invalid identifier"



我有这个过程:

create or replace procedure multiplicate_mts_api_data(number_of_runs NUMBER) AS
v_number_of_runs Number;
v_active_mts_table Varchar2(100);
v_product Varchar2(30) := 'TMP';
Begin
IF number_of_runs > 3 then
v_number_of_runs := 3;
else
v_number_of_runs := number_of_runs;
END IF;
select  value into v_active_mts_table from settings where setting = 'mts.data.table';
For i IN 1..v_number_of_runs 
Loop
execute IMMEDIATE  ' insert into  ' || v_active_mts_table || ' (MTSID ,
PRODUCT,
SERVICELEVEL,
CHARGECODE ,
CHARGECODENAME,
CHARGECODELOCALNAME,
ORIGINZONE,
DESTINATIONZONE ,
CATEGORY ,
SHIPPERCOUNTRY ,
ORIGINCOUNTRY ,
ORIGINSTATION ,
CONSIGNEECOUNTRY ,
DESTINATIONCOUNTRY,
DESTINATIONSTATION ,
AIRLINE ,
DIRECTFLIGHT,
ROUTING ,
FREQUENCY ,
DIRECTMOVEMENT,
FREQUENCYUNIT ,
PRICINGLEVEL ,
CAMPAIGNNAME ,
TRUCKTYPE ,
WEIGHTRATIO ,
CURRENCY ,
CHARGECODEINFOFLAG,
COSTBASE,
MINRATE,
MAXRATE,
UNIT ,
RATEPERUNIT,
RATEWM ,
RATEPERSHIPMENT,
RATEPERENTRY ,
NUMFREELINESINCLUDED,
RATEPERLINEITEM,
PERCENTAGE ,
CHAGECODEREFERENCE,
ALLIN ,
RATEFORDEDICATEDVEHICLE ,
TRUCKSIZEMETRICTONES,
INCLUSIVETOFRT ,
ONREQUEST ,
NOTES ,
TRANSITTIMEUNIT,
TRANSITTIME,
TRANSITTIMECFSTOPORT ,
TRANSITTIMEPORTTOCFS ,
VALIDFROM,
VALIDTO,
WBMIN ,
WBMAX,
OPERATOR1,
AMOUNT1,
UNITPRICE1 ,
OPERATOR2 ,
AMOUNT2 ,
UNITPRICE2,
OPERATOR3 ,
AMOUNT3,
UNITPRICE3 ,
OPERATOR4,
AMOUNT4,
UNITPRICE4 ,
OPERATOR5,
AMOUNT5,
UNITPRICE5 ,
OPERATOR6,
AMOUNT6 ,
UNITPRICE6 ,
OPERATOR7,
AMOUNT7 ,
UNITPRICE7 ,
OPERATOR8,
AMOUNT8 ,
UNITPRICE8,
OPERATOR9,
AMOUNT9 ,
UNITPRICE9,
OPERATOR10,
AMOUNT10 ,
UNITPRICE10,
DISCOUNT1 ,
DENSITY1,
DISCOUNT2,
DENSITY2,
DISCOUNT3,
DENSITY3 ,
DISCOUNT4 ,
DENSITY4  ,
DISCOUNT5  ,
DENSITY5  ,
DISCOUNT6  ,
DENSITY6  ,
DISCOUNT7 ,
DENSITY7  ,
DISCOUNT8 ,
DENSITY8  ,
DISCOUNT9  ,
DENSITY9 ,
DISCOUNT10  ,
DENSITY10  ,
DISCOUNT11  ,
DENSITY11  ,
DISCOUNT12 ,
DENSITY12  ,
ORIGINSTATIONNAME  ,
DESTINATIONSTATIONNAME  ,
CARRIER  ,
CONTAINERTYPE  ,
RATEPERCONTAINER ,
RATEPERCONTAINERPERDAY ,
FREETIME ,
FREETIMEUNIT  ,
ORIGINLOCALITY ,
ORIGINZIPCODEFROM  ,
ORIGINZIPCODETO ,
WEIGHTBREAK  ,
WEIGHTBREAKUNIT ,
TEUTHERESHOLDFORRATEAPPLICABILITY  ,
TRANSHIPMENTPORT ,
FREQUENCYOFSAILINGS  ,
FREQUENCYOFSAILINGSUNIT  ,
DESTINATIONLOCALITY  ,
DESTINATIONZIPCODEFROM  ,
DESTINATIONZIPCODETO  ,
UPDATEDTS  ,
ORIGINZONELR  ,
DESTINATIONZONELR ,
CYTOCYTRANSITTIME  ,
COMMODITYCODE  ,
COMMODITYDESC ,
DEMURRAGEANDDETENTIONCOMBINEDFLAG  ,
NUMBEROFFREEDAYS  ,
EXCLUDEDDAYS  ,
RATEPERWMPERDAY  ,
SERVICELEVELCODE  ,
ADDITIONALCHARGECODESINCLUDED ,
AFPTRANSITTIME  ,
AFPBASIC  ,
AFPMINMFSC  ,
AFPRATEPERKGMFSC  ,
AFPCOSTWEIGHTBASEMFSC  ,
AFPMINMSSC ,
AFPRATEPERKGMSSC  ,
AFPCOSTWEIGHTBASEMSSC ,
AFPRATEPERENTRYOCLE ,
AFPRATEPERLINEITEMOCAL ,
AFPRATEPERENTRYDCLE ,
AFPRATEPERLINEITEMDCAL ,
AFPchargeCodeCargoScreening,
AFPminCargoScreening,
AFPratePerKgCargoScreening,
AFPratePerShptCargoScreening,
AFPchargeCodeDGSurcharge,
AFPminDGSurcharge,
AFPratePerKgDGSurcharge,
AFPratePerShptDGSurcharge,
AFPCargoScreeningFlag,
AFPDGSurchargeFlag,
AFPCo2e,
AFPChargecodeBiofuel,
AFPPerKgBiofuel,
AFPBioFuelFlag,
AFPChargecodeOffsetting,
AFPPerKgOffsetting,
AFPOffsettingFlag,
AFPChargecodeBiofuelOffsetting,
AFPPerKgBiofuelOffsetting,
AFPBioFuelOffsettingFlag,
RATEPERTON ) select ID_GENERATOR.nextval ,
'|| v_product ||' ,
SERVICELEVEL,
CHARGECODE ,
CHARGECODENAME,
CHARGECODELOCALNAME,
ORIGINZONE,
DESTINATIONZONE ,
CATEGORY ,
SHIPPERCOUNTRY ,
ORIGINCOUNTRY ,
ORIGINSTATION ,
CONSIGNEECOUNTRY ,
DESTINATIONCOUNTRY,
DESTINATIONSTATION ,
AIRLINE ,
DIRECTFLIGHT,
ROUTING ,
FREQUENCY ,
DIRECTMOVEMENT,
FREQUENCYUNIT ,
PRICINGLEVEL ,
CAMPAIGNNAME ,
TRUCKTYPE ,
WEIGHTRATIO ,
CURRENCY ,
CHARGECODEINFOFLAG,
COSTBASE,
MINRATE,
MAXRATE,
UNIT ,
RATEPERUNIT,
RATEWM ,
RATEPERSHIPMENT,
RATEPERENTRY ,
NUMFREELINESINCLUDED,
RATEPERLINEITEM,
PERCENTAGE ,
CHAGECODEREFERENCE,
ALLIN ,
RATEFORDEDICATEDVEHICLE ,
TRUCKSIZEMETRICTONES,
INCLUSIVETOFRT ,
ONREQUEST ,
NOTES ,
TRANSITTIMEUNIT,
TRANSITTIME,
TRANSITTIMECFSTOPORT ,
TRANSITTIMEPORTTOCFS ,
VALIDFROM,
VALIDTO,
WBMIN ,
WBMAX,
OPERATOR1,
AMOUNT1,
UNITPRICE1 ,
OPERATOR2 ,
AMOUNT2 ,
UNITPRICE2,
OPERATOR3 ,
AMOUNT3,
UNITPRICE3 ,
OPERATOR4,
AMOUNT4,
UNITPRICE4 ,
OPERATOR5,
AMOUNT5,
UNITPRICE5 ,
OPERATOR6,
AMOUNT6 ,
UNITPRICE6 ,
OPERATOR7,
AMOUNT7 ,
UNITPRICE7 ,
OPERATOR8,
AMOUNT8 ,
UNITPRICE8,
OPERATOR9,
AMOUNT9 ,
UNITPRICE9,
OPERATOR10,
AMOUNT10 ,
UNITPRICE10,
DISCOUNT1 ,
DENSITY1,
DISCOUNT2,
DENSITY2,
DISCOUNT3,
DENSITY3 ,
DISCOUNT4 ,
DENSITY4  ,
DISCOUNT5  ,
DENSITY5  ,
DISCOUNT6  ,
DENSITY6  ,
DISCOUNT7 ,
DENSITY7  ,
DISCOUNT8 ,
DENSITY8  ,
DISCOUNT9  ,
DENSITY9 ,
DISCOUNT10  ,
DENSITY10  ,
DISCOUNT11  ,
DENSITY11  ,
DISCOUNT12 ,
DENSITY12  ,
ORIGINSTATIONNAME  ,
DESTINATIONSTATIONNAME  ,
CARRIER  ,
CONTAINERTYPE  ,
RATEPERCONTAINER ,
RATEPERCONTAINERPERDAY ,
FREETIME ,
FREETIMEUNIT  ,
ORIGINLOCALITY ,
ORIGINZIPCODEFROM  ,
ORIGINZIPCODETO ,
WEIGHTBREAK  ,
WEIGHTBREAKUNIT ,
TEUTHERESHOLDFORRATEAPPLICABILITY  ,
TRANSHIPMENTPORT ,
FREQUENCYOFSAILINGS  ,
FREQUENCYOFSAILINGSUNIT  ,
DESTINATIONLOCALITY  ,
DESTINATIONZIPCODEFROM  ,
DESTINATIONZIPCODETO  ,
UPDATEDTS  ,
ORIGINZONELR  ,
DESTINATIONZONELR ,
CYTOCYTRANSITTIME  ,
COMMODITYCODE  ,
COMMODITYDESC ,
DEMURRAGEANDDETENTIONCOMBINEDFLAG  ,
NUMBEROFFREEDAYS  ,
EXCLUDEDDAYS  ,
RATEPERWMPERDAY  ,
SERVICELEVELCODE  ,
ADDITIONALCHARGECODESINCLUDED ,
AFPTRANSITTIME  ,
AFPBASIC  ,
AFPMINMFSC  ,
AFPRATEPERKGMFSC  ,
AFPCOSTWEIGHTBASEMFSC  ,
AFPMINMSSC ,
AFPRATEPERKGMSSC  ,
AFPCOSTWEIGHTBASEMSSC ,
AFPRATEPERENTRYOCLE ,
AFPRATEPERLINEITEMOCAL ,
AFPRATEPERENTRYDCLE ,
AFPRATEPERLINEITEMDCAL ,
AFPchargeCodeCargoScreening,
AFPminCargoScreening,
AFPratePerKgCargoScreening,
AFPratePerShptCargoScreening,
AFPchargeCodeDGSurcharge,
AFPminDGSurcharge,
AFPratePerKgDGSurcharge,
AFPratePerShptDGSurcharge,
AFPCargoScreeningFlag,
AFPDGSurchargeFlag,
AFPCo2e,
AFPChargecodeBiofuel,
AFPPerKgBiofuel,
AFPBioFuelFlag,
AFPChargecodeOffsetting,
AFPPerKgOffsetting,
AFPOffsettingFlag,
AFPChargecodeBiofuelOffsetting,
AFPPerKgBiofuelOffsetting,
AFPBioFuelOffsettingFlag,
RATEPERTON  from ' || v_active_mts_table || ' where product != '|| v_product;

End loop;

End;

当我尝试运行它时,我得到错误:

Error report -
ORA-00904: "TMP": invalid identifier
ORA-06512: at "DEV_CRDB.MULTIPLICATE_MTS_API_DATA", line 17
ORA-06512: at line 2
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:

有人能告诉我如何解决这个问题吗?如果我尝试通过sql开发人员运行这个插件,它会顺利运行。我是plsql的初学者,所以如果这是一个伪问题,请耐心等待。也许sql插入串联有问题,我不知道。谢谢Petr

这可能是:

查看错误:

ORA-00904: "TMP": invalid identifier
ORA-06512: at "DEV_CRDB.MULTIPLICATE_MTS_API_DATA", line 17

您在此处将TMP分配给一个变量:

v_product Varchar2(30) := 'TMP';

然后在此处引用v_product:

RATEPERTON ) select ID_GENERATOR.nextval ,
'|| v_product ||' ,
SERVICELEVEL,

看起来上面的行导致了错误。原因是在";v_product"-只是串联所需的引号。因此选择变成

...
SELECT ID_GENERATOR.nextval , 
TMP,
SERVICELEVEL,
...

并且可能不存在称为"0"的列;TMP";在引发错误的表格中。

我的猜测是你想选择值";TMP";,而不是列TMP。值";TMP";需要用引号括起来,并且这些引号需要转义,因此请尝试以下操作:

RATEPERTON ) select ID_GENERATOR.nextval ,
'''|| v_product ||''' ,
SERVICELEVEL,

试试看。

相关内容

最新更新