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

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

我有以下数据:

  1. 'DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH'

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

  1. Select 'DJORDAN' User_Code from dual
  2. union
  3. Select 'ADAVIS' User_Code from dual
  4. union
  5. Select 'MJONES' User_Code from dual
  6. union
  7. Select 'DPRESTOM' User_Code from dual
  8. union
  9. Select 'PSMITH' User_Code from dual ;

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

vmjh9lq9

vmjh9lq91#

可以使用集合,例如:

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

或者对于oracle的旧版本:

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

js4nwp542#

另一个简单的解决方案:

  1. create table t1 (user_code varchar2 (10))
  2. /
  3. begin
  4. insert into t1 (user_code)
  5. select trim (column_value) user_code
  6. from xmlTable (
  7. replace (q'"'DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH'"', '''', '"'));
  8. end;
  9. /
  10. select * from t1;

结果:

  1. USER_CODE
  2. ----------
  3. DJORDAN
  4. ADAVIS
  5. MJONES
  6. DPRESTOM
  7. PSMITH
展开查看全部
yqlxgs2m

yqlxgs2m3#

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

  1. SQL> create table test (col varchar2(20));
  2. Table created.
  3. SQL> insert into test
  4. 2 with temp (col) as
  5. 3 (select q'['DJORDAN','ADAVIS','MJONES','DPRESTOM','PSMITH']' from dual)
  6. 4 select regexp_substr(replace(col, chr(39), null), '[^,]+', 1, level) val
  7. 5 from temp
  8. 6 connect by level <= regexp_count(col, ',') + 1;
  9. 5 rows created.
  10. SQL> select * from test;
  11. COL
  12. --------------------
  13. DJORDAN
  14. ADAVIS
  15. MJONES
  16. DPRESTOM
  17. PSMITH
  18. SQL>

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

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

展开查看全部

相关问题