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'
。双引号或不带引号的字符串被解释为标识符,在此上下文中为列名。
所有非常简单的错误,错误消息都非常清楚地指出了这些错误。
我目前正在写一份学校作业,但卡住了。不幸的是,我没有参考 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'
。双引号或不带引号的字符串被解释为标识符,在此上下文中为列名。
所有非常简单的错误,错误消息都非常清楚地指出了这些错误。