PL / SQL接受带单引号的输入。

时间:2015-08-04 23:35:04

标签: plsql

我正在尝试使用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;

1 个答案:

答案 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>