在Firebird中逃脱双重qoutes

时间:2018-04-12 12:04:30

标签: escaping firebird firebird2.5

我有以下SQL语句:

  FOR
    SELECT A.BLIEF_MASKENKEY,
    A.BLIEF_BADR_NAME,
    A.BSA_MASKENKEY,
    A.BLLC_MASKENKEY,
    A.LLTERMIN,
    A.BLLC_ERFASSUNGSDATUM,
    A.WE_MENGE,
    A.BBESP_BESTMENGE,
    A.BBESP_ARTKZ,
    B.BREKL_MASKENKEY,
    B.MASKENKEY,
    B.BREKL_BLIEF_MASKENKEY,
    B.BLIEF_BADR_NAME,
    B.BSA_MASKENKEY,
    B.BSA_ARTBEZ,
    B.MENGE,
    B.ERFASST_AM,
    B.FERTIG_BIS,
    B.BREKLPOVERURS_MASKENKEY,
    B.BREKLPOVERURS_BEZ,
    B.BREKLFEHLURS_MASKENKEY,
    B.BREKLFEHLURS_BEZ,
    B.BREKLFEHLART_MASKENKEY,
    B.BREKLFEHLART_BEZ,
    B.BREKLPOGARANTIE_MASKENKEY,
    B.BREKLPOGARANTIE_BEZ
FROM V_BLLCP A
LEFT OUTER JOIN V_BREKLPO B ON B.BREKL_BLIEF_ID = A.BLIEF_ID AND B.BSA_ID = A.BSA_ID_ARTNR AND B.ERFASST_AM BETWEEN :ANFANGSDATUM AND :ENDDATUM
WHERE A.LLTERMIN BETWEEN :ANFANGSDATUM AND :ENDDATUM AND
        A.BBESP_ARTKZ = '9100'
ORDER BY A.BLIEF_MASKENKEY ASC
INTO :BLIEF_MASKENKEY,
    :BLIEF_BADR_NAME,
    :BSA_MASKENKEY,
    :BLLC_MASKENKEY,
    :LLTERMIN,
    :BLLC_ERFASSUNGSDATUM,
    :WE_MENGE,
    :BBESP_BESTMENGE,

    :NUMMER,
    :LFDNR,
    :BLIEF_NR,
    :BLIEF_NAME,
    :KENNZ,
    :ARTNR,
    :ARTBEZ,
    :MENGE,
    :ERFASST_AM,
    :FERTIG_BIS,
    :VERURSACHER_CODE,
    :VERURSACHER,
    :FEHLER_CODE,
    :FEHLER,
    :FEHLERART_CODE,
    :FEHLERART,
    :RESULTAT_CODE,
    :RESULTAT
 DO
  BEGIN
    -- Relevanzfaktor bestimmen
    IF (RESULTAT_CODE = 'L0001') THEN RELEVANZ_DEZ = 0.05;
    IF (RESULTAT_CODE = 'L0002') THEN RELEVANZ_DEZ = 0.1;
    IF (RESULTAT_CODE = 'L0003') THEN RELEVANZ_DEZ = 0.5;
    IF (RESULTAT_CODE = 'L0004') THEN RELEVANZ_DEZ = 0.5;
    IF (RESULTAT_CODE = 'L0005') THEN RELEVANZ_DEZ = 0;
    IF (RESULTAT_CODE = 'L0006') THEN RELEVANZ_DEZ = 0;
    IF (RESULTAT_CODE = 'L0007') THEN RELEVANZ_DEZ = 1;
    IF (RESULTAT_CODE = 'L0008') THEN RELEVANZ_DEZ = 1;
    IF (RESULTAT_CODE = 'L0009') THEN RELEVANZ_DEZ = 1;
    IF (RESULTAT_CODE = 'L0010') THEN RELEVANZ_DEZ = 0;
    IF (RESULTAT_CODE = 'L0011') THEN RELEVANZ_DEZ = 1;
    IF (RESULTAT_CODE = 'L0012') THEN RELEVANZ_DEZ = 0.1;
    IF (RESULTAT_CODE = 'L0013') THEN RELEVANZ_DEZ = 0.1;
    IF (RESULTAT_CODE = 'L0014') THEN RELEVANZ_DEZ = 0.1;
    IF (RESULTAT_CODE = 'L0015') THEN RELEVANZ_DEZ = 0;
    IF (RESULTAT_CODE = 'L0016') THEN RELEVANZ_DEZ = 0;

    RELEVANZ = RELEVANZ_DEZ * 100;
    RELEVANZ = CAST(RELEVANZ AS INTEGER);
    RELEVANZ = CAST(RELEVANZ || '%' AS VARCHAR(10));
    RELEVANZ_MENGE = MENGE * RELEVANZ_DEZ;


    SUSPEND;
  END

当我执行它时,我收到以下错误: Error conversion from String: "Some "string" here".

我可以看到查询成功返回了3组数据,但是对于第4组,BLIEF_BADR_NAME字段包含双精度qoutes(如“this”)。我相信这是它崩溃的地方。如果有人知道,我怎么能逃脱双打的报价?

至少我认为这会导致问题。

0 个答案:

没有答案