转义引用 Oracle SQL 的结尾

Escaping end of quotation Oracle SQL

在我的存储过程中,我通常喜欢立即执行 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
        ]'
    ;

q 引用语法使用不同的字符。

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

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

您可以在 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;
/