plsql - 我如何用 plsql 转换那个 'a','b','c' 中的 'a,b,c'
问题描述
我如何使用 plsql 将'a,b,c'转换为'a','b','c',因为在我的过程中我需要使用“in”创建一个“where”,但我不能通过'a' ,'b','c'当我调用我的程序时
我的程序如下
CREATE OR REPLACE PACKAGE BODY G_JSON_RAW AS
FUNCTION GET_IMS_DATA(P_FECHA_DESDE IN VARCHAR2,
P_FECHA_HASTA IN VARCHAR2,
P_CLASE IN VARCHAR2,
P_NOMBRE_PROYECTO IN VARCHAR2)
RETURN NOKIA_JSON_RAW_TAB PIPELINED IS
BEGIN
FOR DATO IN (
SELECT /*+ MATERIALIZE PARALLEL(NOKIA_IMS_JSON_RAW,2) */
RT.NOMBRE_PROYECTO,JT.TIPO_JS,JT.FECHA_JS,JT.REGIONAL,JT.INTERVALO,JT.ELEMENTO_1,
JT.ELEMENTO_2,JT.CLAVE,JT.VALOR,JT.REFERENTE
FROM
NOKIA_IMS_JSON_RAW RT,
JSON_TABLE(DOCUMENTO FORMAT JSON,'$'
COLUMNS
TIPO_JS VARCHAR2(19 CHAR) PATH '$.tipo',
FECHA_JS VARCHAR2(100 CHAR) PATH '$.fecha',
REGIONAL VARCHAR2(5 CHAR) PATH '$.regional',
INTERVALO NUMBER PATH '$.intervalo',
ELEMENTO_1 VARCHAR2(500 CHAR)PATH '$.elemento_1',
ELEMENTO_2 VARCHAR2(500 CHAR)PATH '$.elemento_2',
NESTED PATH '$.referencias[*]'
COLUMNS(
NESTED PATH '$.datos[*]'
COLUMNS(
CLAVE VARCHAR2(32)PATH '$.clave',
VALOR VARCHAR2(32)PATH '$.valor'
),
REFERENTE VARCHAR2(100)PATH '$.referente'
)
)
JT
WHERE CLASE IN (SELECT * FROM sys.dbms_debug_vc2coll(P_CLASE))
AND NOMBRE_PROYECTO = P_NOMBRE_PROYECTO
AND FECHA BETWEEN TO_DATE(P_FECHA_DESDE,'DD.MM.YYYY HH24')
AND TO_DATE(P_FECHA_HASTA,'DD.MM.YYYY HH24') + 3599/86400) LOOP
PIPE ROW(NOKIA_JSON_RAW_REC(NOMBRE_PROYECTO => DATO.NOMBRE_PROYECTO,
TIPO => DATO.TIPO_JS,
FECHA => DATO.FECHA_JS,
REGIONAL => DATO.REGIONAL,
INTERVALO => DATO.INTERVALO,
ELEMENTO_1 => DATO.ELEMENTO_1,
ELEMENTO_2 => DATO.ELEMENTO_2,
CLAVE => DATO.CLAVE,
VALOR => DATO.VALOR,
REFERENTE => DATO.REFERENTE));
END LOOP;
RETURN;
END GET_IMS_DATA;
--**--**--**--**--
FUNCTION GET_IMS_DATA_RAW(P_FECHA_DESDE IN VARCHAR2,
P_FECHA_HASTA IN VARCHAR2,
P_CLASE IN VARCHAR2,
P_NOMBRE_PROYECTO IN VARCHAR2,
P_INTERVALO IN NUMBER,
P_MEDICION IN VARCHAR2)
RETURN NOKIA_JSON_RAW_TAB PIPELINED IS
--
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT = ''DD.MM.YYYY HH24:MI:SS''';
--
FOR DATO IN (SELECT /*+ MATERIALIZE PARALLEL(2) */
NOMBRE_PROYECTO,TIPO,FECHA,REGIONAL,INTERVALO,ELEMENTO_1,ELEMENTO_2,CLAVE,VALOR,REFERENTE
FROM GET_IMS_DATA(P_FECHA_DESDE,P_FECHA_HASTA,P_CLASE,P_NOMBRE_PROYECTO)
WHERE REFERENTE IN(SELECT * FROM sys.dbms_debug_vc2coll(P_MEDICION))
AND INTERVALO = P_INTERVALO
) LOOP
PIPE ROW(NOKIA_JSON_RAW_REC(NOMBRE_PROYECTO => DATO.NOMBRE_PROYECTO,
TIPO => DATO.TIPO,
FECHA => DATO.FECHA,
REGIONAL => DATO.REGIONAL,
INTERVALO => DATO.INTERVALO,
ELEMENTO_1 => DATO.ELEMENTO_1,
ELEMENTO_2 => DATO.ELEMENTO_2,
CLAVE => DATO.CLAVE,
VALOR => DATO.VALOR,
REFERENTE => DATO.REFERENTE));
END LOOP;
RETURN;
EXCEPTION
WHEN NO_DATA_NEEDED THEN NULL;
WHEN OTHERS THEN
G_ERROR_LOG_NEW.P_LOG_ERROR('G_JSON_RAW.GET_IMS_DATA_RAW',
SQLCODE,
SQLERRM,
'P_FECHA_DESDE => ' ||P_FECHA_DESDE||
' P_FECHA_HASTA => ' ||P_FECHA_HASTA||
' P_CLASE => ' ||P_CLASE||
' P_NOMBRE_PROYECTO => '||P_NOMBRE_PROYECTO);
END GET_IMS_DATA_RAW;
END G_JSON_RAW;
解决方案
可能你可以使用这样的东西
with data as
(select 'a,b,c' col
from dual)
select regexp_substr(col, '[^,]+', 1, level) result
from data
connect by level <= length(regexp_replace(col, '[^,]+')) + 1;
以上将产生一个输出 -
RESULT
a
b
c
这是您可以在IN
查询中使用的内容
推荐阅读
- react-native - 模棱两可的解决模块 Error RazorPay
- php - 从数据库中获取所有饮料及其成分在 json fromat - PHP - mySQL
- azure - Get-AzureRmConsumptionUsageDetail 限制响应 1000 项
- javascript - 为什么无法使用简单的按钮JS在控制器中检索表单中的选定值)
- angular - 从父 html 按钮调用单击到组件功能
- php - 如何处理php中的ajax分页?
- python - 生成多个范德蒙德数组
- android - 未定义对“ASurfaceTexture_fromSurfaceTexture”的引用
- sql - Postgres Where 查询不适用于字符变化数据类型的数值
- vb.net - 无法在某些项目的组合框中设置默认项