ORA-12728: недопустимый диапазон в вставках регулярного выражения - PullRequest
0 голосов
/ 20 мая 2019

Ошибка возникает при вставке таблицы клиентов и только на моем компьютере, поскольку при тестировании с другими удается загрузить его. Используйте sqldeveloper 18.2 и oracle database express edition 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);

1 Ответ

2 голосов
/ 20 мая 2019

Вам нужно обернуть процедуру 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
...