嗨,我收到以下案例:
我需要根据情况从每个 ID 格式中提取正确的数字
除了 6.00E 0008138007 之外的所有情况均应清洁为:E8138007,现在清洁为 E813800,因此剩下最后一个数字,我不确定我在 SP 中做错了什么,因为我正确地看到了它,知道什么我失踪了?
谢谢你
CREATE OR REPLACE PROCEDURE AGAITAN_PROCESAR_CEDULA (
p_cedula IN VARCHAR2,
p_resultado OUT VARCHAR2
) AS
v_provincia VARCHAR2(2);
v_bloque3 VARCHAR2(4);
v_bloque4 VARCHAR2(6);
v_cedula_limpia VARCHAR2(20);
BEGIN
-- Paso 1: Limpiar la cédula, manteniendo solo números y la letra 'E'
v_cedula_limpia := REGEXP_REPLACE(p_cedula, '[^0-9E]', '');
-- Paso 2: Extraer la provincia
v_provincia := SUBSTR(v_cedula_limpia, 1, 2);
-- Paso 3: Extraer los bloques
v_bloque3 := SUBSTR(v_cedula_limpia, 3, 4); -- Tercer bloque (dígitos 3 a 6)
v_bloque4 := SUBSTR(v_cedula_limpia, 7, 6); -- Cuarto bloque (dígitos 7 a 12)
-- Paso 4: Manejo de casos específicos
IF v_cedula_limpia LIKE '00E%' THEN
-- Caso especial: Si la cédula es de tipo '00E'
p_resultado := 'E' || LTRIM(v_bloque4, '0'); -- Mantener la letra E y limpiar el bloque 4
ELSE
-- Limpiar ceros a la izquierda en la provincia
v_provincia := LTRIM(v_provincia, '0');
-- Limpiar ceros a la izquierda en los bloques
v_bloque3 := LTRIM(v_bloque3, '0');
v_bloque4 := LTRIM(v_bloque4, '0');
-- Formar la cédula limpia
p_resultado := v_provincia || v_bloque3 || v_bloque4;
END IF;
-- Asegurarse de que el resultado no esté vacío
IF p_resultado IS NULL OR p_resultado = '' THEN
p_resultado := '0'; -- O un mensaje adecuado
END IF;
EXCEPTION
WHEN OTHERS THEN
p_resultado := NULL; -- En caso de error, devolver NULL
END AGAITAN_PROCESAR_CEDULA;
/
案例 6. 00E 0008138007 应清洁为:E8138007,现在清洁为 E813800
尝试 SUBSTR(v_cedula_limpia, 7, 7)。这应该可以帮助您从第 4 个区块中获得 7 位数字。