转义引号结束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;
/

最新更新