在我的存储过程中,我通常会像执行立即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;
/