oracle—避免在pl/sql中从双联合中选择

ybzsozfc  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(348)

我有以下数据:

'DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH'

我需要将数据转换为光标o在其他情况下使用插入,然后我执行以下操作:

Select 'DJORDAN' User_Code from dual 
  union
  Select 'ADAVIS' User_Code from dual 
  union
  Select 'MJONES' User_Code  from dual 
  union
  Select 'DPRESTOM' User_Code  from dual 
  union
  Select 'PSMITH' User_Code from dual ;

为了这个目的,有没有什么办法可以替代双职工联合会?
提前谢谢!

vmjh9lq9

vmjh9lq91#

可以使用集合,例如:

select * from SYS.DBMS_DEBUG_VC2COLL ('DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH');

或者对于oracle的旧版本:

select * from TABLE(SYS.DBMS_DEBUG_VC2COLL ('DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH'));
js4nwp54

js4nwp542#

另一个简单的解决方案:

create table t1 (user_code varchar2 (10))
/
begin
    insert into t1 (user_code) 
    select trim (column_value) user_code 
    from xmlTable (
        replace (q'"'DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH'"', '''', '"'));
end;
/
select * from t1;

结果:

USER_CODE
----------
DJORDAN
ADAVIS
MJONES
DPRESTOM
PSMITH
yqlxgs2m

yqlxgs2m3#

或者,如果输入更多,假设名称列表实际上是一个字符串,您可以将其拆分为行,然后插入表中。像这样:

SQL> create table test (col varchar2(20));

Table created.

SQL> insert into test
  2  with temp (col) as
  3    (select q'['DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH']' from dual)
  4  select regexp_substr(replace(col, chr(39), null), '[^,]+', 1, level) val
  5  from temp
  6  connect by level <= regexp_count(col, ',') + 1;

5 rows created.

SQL> select * from test;

COL
--------------------
DJORDAN
ADAVIS
MJONES
DPRESTOM
PSMITH

SQL>

或者,如果你用apex,它的 APEX_STRING.SPLIT 同时也做这项工作:

select column_value
from apex_string.split('DJORDAN,ADAVIS,MJONES,DPRESTOM,PSMITH', ',');

相关问题