PL / SQL: SQL Заявление игнорируется и проблемы с недопустимым идентификатором - PullRequest
0 голосов
/ 04 августа 2020

Я создаю функцию с использованием типов, это дает мне две ошибки: Ошибка (12,7): PL / SQL: SQL Заявление игнорируется Ошибка (27,13): PL / SQL: ORA -00904: «UT»: недопустимый идентификатор

Я не вижу проблем с моим кодом, как показано ниже, какая-либо помощь?

CREATE OR REPLACE EDITIONABLE FUNCTION ESF_GET_USERS
          
RETURN tc_users
IS
    l_users       tc_users;           

BEGIN   
      SELECT t_user
        (  
            Uname,
            FName,
            Sname,
            PName,
            Tit,
            mail,
            FC,
            SC,
            SN,
            SD,
            RC,
            RN,
            CC || ' ' || CN,
            UT
        )
        BULK COLLECT INTO l_users
        FROM USERS_MV;

    RETURN l_users;

EXCEPTION   
    WHEN NO_DATA_FOUND THEN
        RAISE_APPLICATION_ERROR(-20001,'No records returned');     
END esf_users;

Я создаю два типа, один - объект, а второй - таблица из этого объекта, как показано ниже:

CREATE OR REPLACE EDITIONABLE TYPE T_USER 
AS OBJECT
(  
    UNAME       VARCHAR2(20 BYTE),
    FNAME       VARCHAR2(30 BYTE),
    SNAME         VARCHAR2(30 BYTE),
    PNAME   VARCHAR2(30 BYTE),
    TIT           VARCHAR2(30 BYTE),
    MAIL           VARCHAR2(24 BYTE),
    FC     VARCHAR2(10 BYTE),
    SC      VARCHAR2(10 BYTE),
    SN      VARCHAR2(200 BYTE),
    SD       VARCHAR2(10 BYTE),
    RC   VARCHAR2(10 BYTE),
    RN   VARCHAR2(200 BYTE),
    HN  VARCHAR2(100 BYTE),
    UT  VARCHAR2(7 BYTE)
);



CREATE OR REPLACE EDITIONABLE TYPE TC_USERS AS TABLE OF t_user;

Код материализованного представления:

 CREATE MATERIALIZED VIEW "USERS_MV" 
  AS select "UName",
"FName",
"Sname",
"PName",
"Tit",
"mail",
"FC",
"SC",
"SN",
"SD",
"RC",
"RN",
"CC",
"CN",
"UT"
 from (
 SELECT ...

1 Ответ

3 голосов
/ 04 августа 2020

Похоже на классическую c ошибку в Oracle - никогда ничего не заключайте в двойные кавычки. Если вы сделаете это один раз (во время создания этого объекта), вы должны делать это всегда.

SQL> create table test ("Id" number);

Table created.

SQL> select id from test;
select id from test
       *
ERROR at line 1:
ORA-00904: "ID": invalid identifier


SQL> select ID from test;
select ID from test
       *
ERROR at line 1:
ORA-00904: "ID": invalid identifier


SQL> select "ID" from test;
select "ID" from test
       *
ERROR at line 1:
ORA-00904: "ID": invalid identifier


SQL> select "Id" from test;

no rows selected

SQL>

Я предлагаю вам воссоздать все - удалите двойные кавычки. Oracle будет хранить имена, используя ЗАГЛАВНЫЙ регистр, но вы можете ссылаться на объекты / столбцы в любом регистре.

...