【问题标题】:Error PLS-00103 encountered symbol - At output string fields错误 PLS-00103 遇到符号 - 在输出字符串字段
【发布时间】:2021-06-28 02:56:43
【问题描述】:

我的程序的输出字符串出现 pls-00103 错误。

在字段 p_primeravalidacion

PROCEDURE ER_validacion_titulares (p_id_titularidad IN NUMBER, p_primeravalidacion OUT VARCHAR2(1)) 是

在第二个过程中,在 varchar 字段中

PROCEDURE ER_validacion_simulacion (p_id_titularidad IN NUMBER, p_familia IN VARCHAR2(2), p_importe_producto IN NUMBER, p_id_simulacion IN NUMBER, p_id_rating IN NUMBER, p_rating_cliente IN NUMBER, > p_motivo OUT VARCHAR2(200), p_cliente_simulacion OUT NUMBER, p_cif 输出 VARCHAR2(10), p_razon_social 输出 VARCHAR2(10), p_producto_simulacion OUT VARCHAR2(2), p_importe_simulacion OUT NUMBER, p_fecha_simulacion OUT NUMBER, p_raroc_primer_anyo OUT NUMBER, p_raroc_anualizado OUT NUMBER, p_rating OUT NUMBER, p_indicador_raroc OUT NUMBER ) 是

create or replace package API_VALIDACION is

   procedure ER_validacion_titulares;
   procedure ER_validacion_simulacion;
end;
/
create or replace package body API_VALIDACION is

PROCEDURE ER_validacion_titulares (p_id_titularidad IN NUMBER,
                                p_primeravalidacion OUT VARCHAR2(1)) IS
          cuenta NUMBER := 0;
BEGIN
          select count(*) 
            INTO CUENTA
          FROM DCRISK.RAROC_PERSONAS_BCORP where id_titularidad =                           p_id_titularidad and calc_raroc = 'S';

          if(cuenta > 0) then
               p_primeravalidacion := 'S';
          else
               p_primeravalidacion := 'N';
          end if;
               
    
END;

PROCEDURE ER_validacion_simulacion (p_id_titularidad IN NUMBER,
                                p_familia IN VARCHAR2(2),
                                p_importe_producto IN NUMBER,
                                p_id_simulacion IN NUMBER,
                                p_id_rating IN NUMBER,
                                p_rating_cliente IN NUMBER,
                                p_motivo OUT VARCHAR2(200),
                                p_cliente_simulacion OUT NUMBER,
                                p_cif OUT VARCHAR2(10),
                                p_razon_social OUT VARCHAR2(10),
                                p_producto_simulacion OUT VARCHAR2(2),
                                p_importe_simulacion OUT NUMBER,
                                p_fecha_simulacion OUT NUMBER,
                                p_raroc_primer_anyo OUT NUMBER,
                                p_raroc_anualizado OUT NUMBER,
                                p_rating OUT NUMBER,
                                p_indicador_raroc OUT NUMBER                            ) IS
        simulacion_no_existe EXCEPTION;
        titular_no_vinculado EXCEPTION;
        validacionSimulacion BOOLEAN := false;
        validacionTitularidad BOOLEAN := false;
        grupo VARCHAR2(20);
        vAux NUMBER := 0;
        vTitularidad NUMBER := 0;
        grupo_mayor_exposicion VARCHAR2(20);
        exposicion NUMBER := 0;
        total NUMBER := 0;
        exposicion_aux NUMBER := 0;
        CURSOR grupos IS
            select distinct o1 as grupo
            from bdd_simroe.T_VROE_INF_POSICIONES_GRUPO 
            where o2 IN (
                 SELECT IDEPER 
                 FROM BDD_SIMROE.TROE_SIMUL_CLIENTES 
                 WHERE ID_SIMULACION = p_id_simulacion AND ID_TITULARIDAD = p_id_titularidad);
                           
BEGIN
          --Validacion simulacion existe

          select count(*) into vAux 
          from bdd_simroe.troe_simulaciones 
          where id_simulacion = p_id_simulacion;

          if (vAux < 1) then
             RAISE simulacion_no_existe;
          end if;
             
          --Titular no vinculado a titularidad

          select ID_TITULARIDAD into vTitularidad
          from dcrisk.raroc_personas_bcorp 
          where id_numpersona IN (
            select id_persona 
            from bdd_simroe.troe_simulaciones 
            where id_Simulacion = p_id_simulacion);
          
          if ( vTitularidad != p_id_titularidad) then
             RAISE titular_no_vinculado;
          end if;
             

          --Calculo campos salida
          --
          select ID_NUMPERSONA,
          IDEPER,
          NOMBRE,
          RAT_GBL
          INTO
          p_cliente_simulacion,
          p_cif,
          p_razon_social,
          p_rating
          from bdd_simroe.TROE_SIMUL_CLIENTES 
          where id_simulacion = p_id_simulacion;

          select 
          ID_PRODUCTO,
          SALDO_MEDIO,
          FECHA_ALTA,
          RAROC_PRIMER_ANYO,
          RAROC_ANUALIZADO
          into
          p_producto_simulacion,
          p_importe_producto,
          p_fecha_simulacion,
          p_raroc_primer_anyo,
          p_raroc_anualizado
          from bdd_simroe.TROE_SIMULACIONES
          where id_simulacion = p_id_simulacion;
          
          SELECT P.RAROC_OBJ into p_indicador_raroc
          FROM BDD_SIMROE.PARAMETROS_APP P 
          WHERE P.ID_PERFIL = 1;
          
          
            FOR rec IN grupos
              LOOP
                      select EXPOSICION INTO exposicion from table(bdd_simroe.API_INFORMES.informe_cart_y_sim_sit_irreg('es','J862312',rec.grupo,'P','0')) WHERE CONCEPTO = 'TOTAL CARTERA';  
                      if (exposicion > exposicion_aux) then
                        grupo_mayor_exposicion := rec.grupo;
                        exposicion_aux := exposicion;
                      end if;
--                      DBMS_OUTPUT.put_line('grupo: ' || rec.grupo || ' EXPOSICION: ' || exposicion || ' Grupo mayor expo: ' || grupo_mayor_exposicion || ' Expo aux: ' || exposicion_aux);
              END LOOP;
              select RAROC INTO total from table(bdd_simroe.API_INFORMES.informe_cart_y_sim_sit_irreg('es','J862312',grupo_mayor_exposicion,'P','0')) WHERE CONCEPTO = 'TOTAL CARTERA';  
--              DBMS_OUTPUT.put_line('Total RAROC cliente: ' || total);            
          
                       
EXCEPTION
            WHEN simulacion_no_existe THEN
              p_motivo := "El número de simulación informado no existe";
    
            WHEN titular_no_vinculado THEN
              p_motivo := "El titular de la simulación no coincide con ninguno de los titulares del ER";
    
    
END;



end;

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    很明显,程序的参数不能有size

    SQL> create or replace procedure p_test(p_familia IN VARCHAR2(2)) is
      2  begin
      3    null;
      4  end;
      5  /
    
    Warning: Procedure created with compilation errors.
    
    SQL> show err
    Errors for PROCEDURE P_TEST:
    
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    1/39     PLS-00103: Encountered the symbol "(" when expecting one of the
             following:
             := . ) , @ % default character
             The symbol ":=" was substituted for "(" to continue.
    
    SQL> l1
      1* create or replace procedure p_test(p_familia IN VARCHAR2(2)) is
    SQL> c/(2)//
      1* create or replace procedure p_test(p_familia IN VARCHAR2) is
    SQL> /
    
    Procedure created.
    
    SQL>
    

    因此,仅使用 VARCHAR2 而不是例如VARCHAR2(2).

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 2016-11-05
      相关资源
      最近更新 更多