【问题标题】:Escaping end of quotation Oracle SQL转义结束报价 Oracle SQL
【发布时间】:2021-06-02 12:00:09
【问题描述】:

在我的存储过程中,我通常会执行立即 q'[要执行的代码]。 但是,我的代码中有一些东西有'$ [*]'。引号和括号被 Oracle 解释为我的引号的结尾。我怎么能逃脱呢?请在下面找到完整的代码。

    EXECUTE IMMEDIATE q'[
CREATE OR REPLACE VIEW vw_err_text AS
    WITH aux AS (
        SELECT
            err_txt
        FROM
            u339990_mr2
        WHERE
            err_txt IS NOT NULL
    )
    SELECT
        error_text,
        COUNT(*) AS ct,
        round(RATIO_TO_REPORT(COUNT(1)) OVER() * 100, 2) perc
    FROM
        aux CROSS APPLY
            JSON_TABLE(err_txt, '$[*]'
                COLUMNS
                    error_text PATH '$'
            )
    GROUP BY
        error_text
    ORDER BY
        ct DESC,
        error_text
        ]'
    ;

【问题讨论】:

    标签: sql oracle quoting


    【解决方案1】:

    q 引号语法使用不同的字符(或多个字符)。

    q'[ ... ]' 是正确的,但您也可以使用q'( ... )'(或使用花括号或<>)。此外,您可以使用任何单个字符(未配对),如 q'@ ... @'q'^ ... ^' - 只需使用数据中不会自然出现闭合组合的字符。这正是语法允许这种灵活性的原因。

    https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm#i42617

    【讨论】:

      【解决方案2】:

      你可以使用任何带有 q-quote 语法的字符,它不必是方括号。检查此代码:

      set serveroutput on size 999999
      clear screen
      declare
      begin
        dbms_output.put_line(q'[some text with  'quotes']');
        dbms_output.put_line(q'!some text with square [] brackets!');
        dbms_output.put_line(q'€some text with square [] brackets and exclamation marks ! €');
        dbms_output.put_line(q'~some text with square [] brackets, exclamation marks ! and a €~');
        dbms_output.put_line(q'zsome text with square [] brackets, exclamation marks ! and a ~ z');
        
      end;
      /
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-03
        • 2023-04-03
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 2018-02-19
        • 1970-01-01
        • 2022-01-05
        相关资源
        最近更新 更多