Oracle Apex:带concat的条件值列表

Oracle Apex:带concat的条件值列表,oracle,plsql,oracle-apex,lov,Oracle,Plsql,Oracle Apex,Lov,我正在尝试根据从页面项获取的条件构建动态和有条件的LOV。我遇到了这个例子 IF :P123_CHOICE = 'EMP' THEN RETURN 'SELECT ename d, empno r FROM emp'; ELSE RETURN 'SELECT dname d, deptno r FROM dept'; END IF; 但是我需要更复杂一点的东西: IF :P123_CHOICE = 'EMP' THEN RETURN 'SELECT enam

我正在尝试根据从页面项获取的条件构建动态和有条件的LOV。我遇到了这个例子

IF :P123_CHOICE = 'EMP' THEN
  RETURN
  'SELECT ename d, empno r
   FROM emp';
ELSE
  RETURN
  'SELECT dname d, deptno r
   FROM dept';
END IF;
但是我需要更复杂一点的东西:

IF :P123_CHOICE = 'EMP' THEN
  RETURN
  'SELECT ename||' : '||esurname d, empno r
   FROM emp
   WHERE (admin ='N' or ADMIN = 'Y')
   ';
ELSE
  RETURN

  'SELECT ename||' : '||esurname d, empno r
   FROM emp
   WHERE admin ='N'
   ';
END IF;
因此,我得到了以下错误:

*ORA-06550: line 3, column 21: PL/SQL: ORA-01756: quoted string not properly terminated ORA-01756: quoted string not properly terminated ORA-06550: line 1, column 13: PL/SQL: SQL Statement ignored ORA-06550: line 5, column 4: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: ; ORA-01756: quoted string not properly terminated*

这显然是我无法解决的格式问题。非常感谢您的帮助。

为了绕过特殊字符:

IF :P123_CHOICE = 'EMP' THEN
RETURN
      q'[select ... ]';
ELSE
RETURN
      q'[ select ...]';
END IF;

这很酷,也是保持字符串整洁的好方法。另一方面,如果您只是想转义一个引号,那么一个引号就可以做到这一点:
“从emp中选择ename d,empno r,其中admin=''N'
。两个单引号=字符串中的一个转义引号。这是非常基本的,你会在单引号样式上遇到比q函数更多的问题。好的,那么你如何从我的例子中摆脱concat呢?像这样| |'':“||