我正在尝试使用 3 个字符串来表示一组姓氏、名字和中间名。
传入的参数最终看起来像这样:
lastNames IN VARCHAR2 := NULL
'Smith/Brown/Green'
firstNames IN VARCHAR2 := NULL,
'Joseph/Dan/Sam'
miNames IN VARCHAR2 := NULL,
'c.//J.'
目标是为动态 SQL 构建一个过滤器,如下所示:
v_namesFilter VARCHAR(32767 BYTE);
v_namesFilter := ' AND (last_name = ''Smith'' AND middle_name = ''C'' AND first_name = ''Joseph'') OR (last_name = ''Brown'' AND first_name = ''Dan'') OR (last_name = ''Green'' AND middle_name = ''J.'' AND first_name = ''Sam'')
到目前为止,我有一个这样的传入参数:
lastNames IN VARCHAR2 := NULL,
然后
IS(
我有:
v_last_names_tab LAST_NAMES_TAB;
LAST_NAMES_TAB 定义如下:
create or replace TYPE "LAST_NAMES_TAB" AS TABLE OF LAST_NAMES;
LAST_NAMES 的定义如下:
create or replaceTYPE "LAST_NAMES" AS OBJECT(
lastName VARCHAR2(32767)
);
在我开始之后,我有:
-- split last names into table
SELECT LAST_NAMES( lastName )
BULK COLLECT INTO :v_last_names_tab
FROM (
SELECT trim( regexp_substr(lastNames, '[^/]+', 1, LEVEL) )AS lastName
FROM DUAL
CONNECT BY instr(lastNames, '/', 1, LEVEL - 1) > 0
);
我认为这会填满一个名为 v_last_names_tab 的 TYPE LAST_NAMES_TAB 表,如下所示:
lastName
--------
Smith
Brown
Green
但是当我尝试编译时,我收到“Bad Bind variable”:v_last_names_tab”错误消息。
我怎样才能像这样格式化我的传入数据,以便我可以滚动它。