我如何只需要输入一次数据?

How do I only have to input data once?

我目前正在使用 regexp_subtr 函数获取一串数据(用户输入)并将其转换为列表。有什么办法可以让我不必输入两次数据。这是我目前拥有的:

select regexp_substr((WITH X AS (SELECT ('&EmployeeID') a FROM DUAL) SELECT REPLACE(X.a,' ',',') FROM X),'[^,]+', 1, level) "Employee" 
from dual
connect by regexp_substr ((WITH X AS (SELECT ('&EmployeeID') a FROM DUAL) SELECT REPLACE(X.a,' ',',') FROM X),'[^,]+', 1, level) 
is not null;

是的,你可以像这样清理它:

WITH X AS 
  (SELECT REPLACE('&EmployeeID',' ',',') a FROM DUAL)
select regexp_substr(X.a,'[^,]+', 1, level) "Employee" 
from X
connect by regexp_substr(X.a,'[^,]+', 1, level) is not null;

将 xmltable 与 tokenize 一起使用:

select * 
from xmltable('tokenize(replace(.," ",","),",")'
              passing '&EmployeeID'
              columns s varchar2(100) path '.');

DBFiddle: https://dbfiddle.uk/?rdbms=oracle_21&fiddle=19ab9c444502f6e1fd3bdaa44e04ab27

您的客户端似乎是 sqlplus,其中和号 ('&') 指示客户端提示用户输入。您可以通过在变量名前添加第二个符号来避免对同一个变量 re-prompted。

select regexp_substr((WITH X AS (SELECT ('&&EmployeeID') a FROM DUAL) SELECT REPLACE(X.a,' ',',') FROM X),'[^,]+', 1, level) "Employee" 
from dual
connect by regexp_substr ((WITH X AS (SELECT ('&&EmployeeID') a FROM DUAL) SELECT REPLACE(X.a,' ',',') FROM X),'[^,]+', 1, level) 
is not null;