【问题标题】:ORA-12728: invalid range in regular expression InsertsORA-12728: 正则表达式插入中的无效范围
【发布时间】:2019-05-20 11:17:45
【问题描述】:

错误出现在表客户端的插入并且仅在我的计算机中,因为如果它设法加载它,请与其他人一起测试。使用 sqldeveloper 18.2 和 oracle 数据库速成版 11g。

表格:

CREATE TABLE Clientes(
DNI_CIF VARCHAR2(9) NOT NULL CHECK (REGEXP_LIKE(DNI_CIF, '[A-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z]')),
Contrasena VARCHAR2(25) NOT NULL,
Telefono NUMBER(9) NOT NULL,
Email VARCHAR2(25) UNIQUE,
TipoCliente VARCHAR2(25),
Nombre VARCHAR2(30) NOT NULL,
FormaPago VARCHAR2(20),
NumeroCuenta VARCHAR2 (24),
CancelacionesIndebidas INT CHECK (CancelacionesIndebidas BETWEEN 0 and 3),
PRIMARY KEY(DNI_CIF),
CONSTRAINT Clientes_chk1 CHECK (TipoCliente IN ('Particular', 'Empresa', 'Administracion Publica'))
);

程序:

PROCEDURE insert_clientes(w_DNI_CIF clientes.dni_cif%TYPE,w_Contrasena clientes.contrasena%TYPE,w_Telefono clientes.telefono%TYPE,w_Email clientes.email%TYPE,
    w_TipoCliente clientes.tipocliente%TYPE,w_Nombre clientes.nombre%TYPE,
    w_FormaPago clientes.formapago%TYPE,w_NumeroCuenta clientes.numerocuenta%TYPE,
    w_CancelacionesIndebidas clientes.cancelacionesindebidas%TYPE);
CREATE OR REPLACE PACKAGE BODY INSERTS AS 


PROCEDURE insert_clientes(w_DNI_CIF clientes.dni_cif%TYPE,w_Contrasena clientes.contrasena%TYPE,w_Telefono clientes.telefono%TYPE,w_Email clientes.email%TYPE,
w_TipoCliente clientes.tipocliente%TYPE,w_Nombre clientes.nombre%TYPE,w_FormaPago clientes.formapago%TYPE,w_NumeroCuenta clientes.numerocuenta%TYPE,
w_CancelacionesIndebidas clientes.cancelacionesindebidas%TYPE)
IS

BEGIN

INSERT INTO Clientes (DNI_CIF,Contrasena,Telefono,Email,TipoCliente,Nombre,FormaPago,NumeroCuenta,CancelacionesIndebidas)
VALUES(w_DNI_CIF,w_Contrasena,w_Telefono,w_Email,w_TipoCliente,w_Nombre,w_FormaPago,w_NumeroCuenta,w_CancelacionesIndebidas);

END insert_clientes;

插入:

INSERTS.insert_clientes('12312389P','12345678',666666666,'una@muno.com','Particular','Miguel de Unamuno','Transferencia','ES7119225879874039280971',0);

【问题讨论】:

    标签: oracle stored-procedures plsql sql-insert


    【解决方案1】:

    您需要将insert_clientes 过程包装在包的包规范部分,以CREATE OR REPLACE PACKAGE INSERTS AS 开头,END INSERTS; 结尾。包体也缺少END INSERTS;

    SQL> CREATE OR REPLACE PACKAGE INSERTS AS
      PROCEDURE insert_clientes(w_DNI_CIF                clientes.dni_cif%TYPE,
                                w_Contrasena             clientes.contrasena%TYPE,
                                w_Telefono               clientes.telefono%TYPE,
                                w_Email                  clientes.email%TYPE,
                                w_TipoCliente            clientes.tipocliente%TYPE,
                                w_Nombre                 clientes.nombre%TYPE,
                                w_FormaPago              clientes.formapago%TYPE,
                                w_NumeroCuenta           clientes.numerocuenta%TYPE,
                                w_CancelacionesIndebidas clientes.cancelacionesindebidas%TYPE);
    END INSERTS;
    /
    SQL> CREATE OR REPLACE PACKAGE BODY INSERTS AS
      PROCEDURE insert_clientes(w_DNI_CIF                clientes.dni_cif%TYPE,
                                w_Contrasena             clientes.contrasena%TYPE,
                                w_Telefono               clientes.telefono%TYPE,
                                w_Email                  clientes.email%TYPE,
                                w_TipoCliente            clientes.tipocliente%TYPE,
                                w_Nombre                 clientes.nombre%TYPE,
                                w_FormaPago              clientes.formapago%TYPE,
                                w_NumeroCuenta           clientes.numerocuenta%TYPE,
                                w_CancelacionesIndebidas clientes.cancelacionesindebidas%TYPE) IS
    
      BEGIN
    
        INSERT INTO Clientes
          (DNI_CIF,
           Contrasena,
           Telefono,
           Email,
           TipoCliente,
           Nombre,
           FormaPago,
           NumeroCuenta,
           CancelacionesIndebidas)
        VALUES
          (w_DNI_CIF,
           w_Contrasena,
           w_Telefono,
           w_Email,
           w_TipoCliente,
           w_Nombre,
           w_FormaPago,
           w_NumeroCuenta,
           w_CancelacionesIndebidas);
    
      END insert_clientes;
    END inserts;
    /
    

    并执行如下(所以,你为w_dni_cif列提供的字符串没有问题):

    SQL> exec inserts.insert_clientes('12312389P','12345678',666666666,'una@muno.com','Particular','Miguel de Unamuno','Transferencia','ES7119225879874039280971',0);
    PL/SQL procedure successfully completed
    
    SQL> commit;
    
    Commit complete
    

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多