我正在尝试使用PL / SQL接受功能来接收用户输入。但是我希望用户输入能够接受单引号或双引号。双引号似乎不是问题,但单引号是个问题。我在下面发布了我的代码,但我不断收到错误,因为它不喜欢单引号。虽然我知道在实际情况下,用户输入将通过Web前端传入并传递给数据库,但不幸的是,这项功课分配只是要求PL / SQL。非常感谢任何帮助,谢谢!
Accept p_1 prompt 'Please enter the region name (CHILD_NAME):'
DECLARE
--pragma execption_init
user_input REGION.CHILD_NAME%type := '&p_1';
v_res number :=0;
BEGIN
SYS.DBMS_OUTPUT.PUT_LINE('USER INPUT:');
SYS.DBMS_OUTPUT.PUT_LINE(user_input);
SYS.DBMS_OUTPUT.PUT_LINE('');
SYS.DBMS_OUTPUT.PUT_LINE('MY OUTPUT:');
/* select count(*)
into v_res
from REGION where upper(CHILD_NAME) like upper(user_input);
if v_res = 0 then
SYS.DBMS_OUTPUT.PUT_LINE(user_input ||' is not in the table.');
else
SYS.DBMS_OUTPUT.PUT_LINE('Need to build my logic here.');
end if;
SYS.DBMS_OUTPUT.PUT_LINE('');*/
END;
答案 0 :(得分:2)
使用alternative quoting mechanism q
:
set serveroutput on
accept p_1 prompt 'Say something: '
declare
v_something varchar2(32767) := q'[&p_1]';
begin
dbms_output.put_line('(v_something = ' || v_something || ')');
end;
/
运行示例
SQL> @so52
Say something: 'foo [is] 'bar''
old 2: v_something varchar2(32767) := q'[&p_1]';
new 2: v_something varchar2(32767) := q'['foo [is] 'bar'']';
(v_something = 'foo [is] 'bar'')
PL/SQL procedure successfully completed.
SQL>