PL/SQL 无效标识符,table_or_view 不存在,列不允许

PL/SQL invalid identifier, table_or_view doesn't exist, column not allowed

我目前正在写一份学校作业,但卡住了。不幸的是,我没有参考 material 来浏览,而且 oracle 的用户手册一点也不友好。

分配如下:“在存储过程的帮助下在 table sms_budget_abonnement 上创建触发器,当用户通过max_number 个要在 his/hers 订阅

内发送的文本

这些是相关的 table(<>英文翻译):

KLANTGEGEVENS <customer information>                                

NAAM <name>     GESLACHT    ADRES   WOONPLAATS  MOBIEL_NUMMER   REKENINGNUMMER <billing_number> ABONNEMENTSVORM <subscription type> START_DATUM EIND_DATUM

SMS-BERICHT <text_message>                  

MOBIELE_NUMMER_VERZENDER <mobile_number_sender> MOBIELE_NUMMER_ONTVANGER    LENGTE  DATUM   TIJD    INHOUD (GEDOCEERD)

ABONNEMENTSVORMEN <subscription_type>               

NAAM <subscription_name>    BASISKOSTEN SMS <max_number_of_text_messages>   SMS-BOETE <price per extra message> BELLEN

FACTUUR <billing sheet>

REKENINGNUMMER <billing_number>   DATE  BEDRAG <price> STATUS

这是code/query我写的:

   CREATE OR REPLACE TRIGGER opdracht_2e
BEFORE INSERT ON SMSBERICHT
FOR EACH ROW

DECLARE
NR_OF_PERSON NUMBER;
NR_OF_TEXT_MESSAGES NUMBER;
MAX_NUMBER_SMS NUMBER;
REKENING_NUMMER VARCHAR(255);
BOETE NUMBER;

BEGIN
select DISTINCT MOBIELNUMMERVERZENDER INTO NR_OF_PERSON
FROM SMSBERICHT;

SELECT COUNT(*) INTO NR_OF_TEXT_MESSAGES
FROM SMSBERICHT
WHERE MOBIELNUMMERVERZENDER = NR_OF_PERSON;

SELECT SMS into MAX_NUMBER_SMS
FROM ABONNEMENTSVORMEN av
JOIN Klantgegevens k ON k.ABBONEMENTSVORM = av.naam
WHERE k.mobielnummmer = NR_OF_PERSON;

SELECT REKENINGNUMMER into REKENING_NUMMER
FROM Klantgegevens
WHERE mobielnummer = NR_OF_PERSON;

SELECT SMS_BOETE INTO BOETE
FROM ABBONEMENTSVORMEN av
JOIN Klantgegevens k on k.ABBONEMENTSVORM = av.naam
WHERE k.mobielnummer = NR_OF_PERSON;

IF(NR_OF_TEXT_MESSAGES > MAX_NUMBER_SMS) THEN
insert into factuur
values (REKENING_NUMMER, SYSDATE, (NR_OF_TEXT_MESSAGES - MAX_NUMBER_SMS) * BOETE, "TE BETALEN");
END IF;
END;

但是我遇到了以下错误,这些错误并没有真正帮助我朝着正确的方向前进,如果有人愿意向我澄清这些信息,那就太好了。

Project: sqldev.temp:/IdeConnections%23hanze.jpr
hanze
Error(16,1): PL/SQL: SQL Statement ignored
Error(19,7): PL/SQL: ORA-00904: "K"."MOBIELNUMMMER": invalid identifier
Error(25,1): PL/SQL: SQL Statement ignored
Error(26,6): PL/SQL: ORA-00942: table or view does not exist
Error(31,1): PL/SQL: SQL Statement ignored
Error(32,84): PL/SQL: ORA-00984: column not allowed here

提前致谢!

您在第 19 行有一个额外的 m

WHERE k.mobielnummmer = NR_OF_PERSON;

第二个错误在本节中,特别是 FROM 单独的:

SELECT SMS_BOETE INTO BOETE
FROM ABBONEMENTSVORMEN av
JOIN Klantgegevens k on k.ABBONEMENTSVORM = av.naam
WHERE k.mobielnummer = NR_OF_PERSON;

较早的参考文献只有一个B; ABBONEMENTSVORMEN。所以你用错了名字。您显示的 table 描述不准确也于事无补。最好显示实际定义,例如来自 describe <table>.

在这一行中,您有一个用双引号而不是单引号括起来的字符串值:

values (REKENING_NUMMER, SYSDATE, (NR_OF_TEXT_MESSAGES - MAX_NUMBER_SMS) * BOETE, "TE BETALEN");

应该是'TE BETALEN'。双引号或不带引号的字符串被解释为标识符,在此上下文中为列名。

所有非常简单的错误,错误消息都非常清楚地指出了这些错误。