繁体   English   中英

ORA-00936:缺少表达式Oracle Apex

[英]ORA-00936: missing expression Oracle Apex

SELECT crime_name || 'Was Committed On' ||, crime_date, victim.firstname AS "VICTIM" || 'Is The Victim', ||witness.firstname AS "WITNESS" || 'Witnessed The Crime' ||, Suspect.firstname AS "SUSPECT" || 'Is Suspected Of Committing The Crime' || FROM Crime, Victim, Witness, Suspect
WHERE victim.crime_no = crime.crime_no AND witness.crime_no = crime.crime_no AND suspect.crime_no = crime.crime_no;  

谁能帮我? 我不断收到丢失的表达式错误,我似乎无法弄清楚。 任何帮助,将不胜感激。

我正在使用oracle Apex

谢谢!

您同时具有||几个字段 ,将它们分开。 您应该删除冗余运算符:

SELECT crime_name || ' Was Committed On ' || crime_date, 
       victim.firstname AS "VICTIM" || ' Is The Victim', 
       witness.firstname AS "WITNESS" || ' Witnessed The Crime',
       Suspect.firstname AS "SUSPECT" || ' Is Suspected Of Committing The Crime' 
FROM   Crime, Victim, Witness, Suspect
WHERE  victim.crime_no = crime.crime_no AND 
       witness.crime_no = crime.crime_no AND 
       suspect.crime_no = crime.crime_no;  

尝试这个:

SELECT crime_name || ' Was Committed On ' || crime_date, 
       victim.firstname || ' Is The Victim' AS "VICTIM" , 
       witness.firstname || ' Witnessed The Crime'  AS "WITNESS",
       Suspect.firstname || ' Is Suspected Of Committing The Crime' AS "SUSPECT"
FROM   Crime, Victim, Witness, Suspect
WHERE  victim.crime_no = crime.crime_no AND 
       witness.crime_no = crime.crime_no AND 
       suspect.crime_no = crime.crime_no; 

别名必须在最后。

适应Apex报告页面中的多对一关系

先前发布的答案已回答了管理多个表之间的一对一关系输出的特定问题: CRIMEVICTIMWITNESSSUSPECT 我发现此模式的问题空间很有趣,并且希望在初始设计中进行扩展以考虑一些“真实的”用例和场景。

由于此OP最初被标记为问题,因此显示如何将半复杂的架构结构放入Apex页面设计或报表中也可能很有用。

设计多对一数据关系

以下解决方案是对OP的扩展,以考虑在VICTIMWITNESSSUSPECT中存在多个可能与给定犯罪匹配的记录的情况下显示输出的可能性。

新要求:让我们在设计中包括另外四个实体(并将三个原始实体合并):

  1. 犯罪报告实体 :这是物理记录(无论是书面的还是电子的),可以捕获所调查犯罪的详细信息。 我认为这是OP构造的串联字符串背后的想法。

    SELECT crime_name || ' Was Committed On ' || to_char(crime_date,'MM/DD/YYYY) || victim.firstname || ' Is The Victim. ' || witness.firstname || ' Witnessed The Crime. ' || Suspect.firstname || ' Is Suspected Of Committing The Crime.'

    ...(改编自@mureinik先前发布的解决方案)

    还包括一些其他假设,即针对同一罪行可能要提交许多不同的报告:多个执法代表可以分开调查任务,也可以彼此独立地提交完全不同的报告。 在这种情况下,关联的CRIME仍然是相同的,但是每个帐户都是唯一不同的报表。

  2. 人实体:分离三个不同的表对受害人嫌疑人和证人在增加查询充分考虑犯罪的实例或报告的更多连接。 这也混淆了一个更简单的共性,即这三个表中的任何人都只是在犯罪事件中扮演不同角色的“人”。

  3. 员工角色关联实体:执法人员和人员是此数据模型中的一种特殊的“ PERSON”。 它们具有与一般人实体库无关的特殊元信息,例如

    • STAFF_TITLE (OFC。,DET。,INV。或其他一些等级名称等)
    • STAFF_ROLE (官员,侦探,调查员等)
    • DATE_ASSIGNED/SUSPENDED这将影响与员工姓名关联的LOV。 随着时间的流逝,相同的员工将辞职,从晋升或过渡到其他职位。 他们的头衔和职级应该跟随他们。
  4. 犯罪协会实体:每个PERSON记录都与犯罪报告相关联,并具有诸如VICTIM,SUSPECT和WITNESS之类的角色。

构建“ DOJ”(司法部)架构演示

通过以下DDL SQL语句指定了满足OP要求的架构设计和新要求:(后接.csv格式的示例数据)

DOJ_CRIME表

 CREATE TABLE  "DOJ_CRIME" 
    (   "CRIME_NO" NUMBER(15,0) NOT NULL ENABLE, 
     "CRIME_DETAIL" VARCHAR2(100), 
     "LOCATION" VARCHAR2(40), 
     "DATE_REPORTED" DATE NOT NULL ENABLE, 
      CONSTRAINT "DOJ_CRIME_PK" PRIMARY KEY ("CRIME_NO") ENABLE
    )
 /


 "CRIME_NO","CRIME_DETAIL","LOCATION","DATE_REPORTED"
 "21","Kidnapping","WOODBURY, PA","01/31/2014"
 "4","Domestic Violence","LIBERTY CITY, PA","01/30/2014"
 "2","Grand Theft Auto","LIBERTY CITY, PA","02/25/2014"
 "1","Suspected Arson Event","BOSTON, MA","02/25/2014"
 "3","Aggravated Assault and Battery","PHILADELPHIA, PA","03/01/2014"

DOJ_PERSON表

 CREATE TABLE  "DOJ_PERSON" 
    (   "PERSON_ID" NUMBER(10,0) NOT NULL ENABLE, 
     "PERSON_NAME" VARCHAR2(100) NOT NULL ENABLE, 
     "DATE_OF_BIRTH" DATE, 
     "DATE_ADDED" DATE, 
     "DATE_MODIFIED" DATE, 
      CONSTRAINT "DOJ_PERSON_PK" PRIMARY KEY ("PERSON_ID") ENABLE
    )
 /


 "PERSON_ID","PERSON_NAME","DATE_OF_BIRTH","DATE_ADDED","DATE_MODIFIED"
 "1","PATRICK GUILBERT","","01/10/2014",""
 "2","STEFANO MILAN","","01/10/2014",""
 "3","ORLANDO VIGO","","01/10/2014",""
 "4","RACHEL MARTIN","","01/10/2014",""
 "5","LOUIS HATCHER","","01/10/2014",""
 "6","MOIRA BOUVIER","","02/04/2014",""
 "7","RHETT BUTLER","","02/04/2014",""
 "8","PATRICIA NASH","","02/04/2014",""
 "9","WANDA YAVISH","","02/04/2014",""
 "10","CARL GRIMES","","02/25/2014",""
 "11","KIMBERLY POTTS","","02/25/2014",""
 "12","VANDER NEILS","","02/25/2014",""
 "13","CLARK HENDERSON","","02/25/2014",""
 "14","SARAH BLACKTHORNE","","02/25/2014",""
 "15","KILLIAN LAGER","","02/25/2014",""
 "16","PHILLIP FOGBAY","","02/25/2014",""
 "17","CHARLES HARRIS","","03/02/2014",""
 "18","PENNY SHALE","","03/02/2014",""
 "19","LAWRENCE NEVILLE","","03/02/2014",""
 "20","BONNIE DEWITT","","03/02/2014",""
 "21","JUNE LEWIS","","03/02/2014",""
 "22","TARA YOUNG","","03/20/2014",""
 "23","WENDY NORRIS","","03/20/2014",""
 "24","AIDEN LIGHTFOOT","","03/20/2014",""

DOJ_STAFF_ROLE表

 CREATE TABLE  "DOJ_STAFF_ROLE" 
    (   "PERSON_ROLE_ID" NUMBER(10,0) NOT NULL ENABLE, 
     "PERSON_ID" NUMBER(10,0) NOT NULL ENABLE, 
     "STAFF_ROLE" VARCHAR2(40) NOT NULL ENABLE, 
     "STAFF_TITLE" VARCHAR2(40) NOT NULL ENABLE, 
     "DATE_ASSIGNED" DATE NOT NULL ENABLE, 
     "DATE_SUSPENDED" DATE, 
      CONSTRAINT "DOJ_STAFF_ROLE_PK" PRIMARY KEY ("PERSON_ROLE_ID") ENABLE
    )
 /
 ALTER TABLE  "DOJ_STAFF_ROLE" ADD CONSTRAINT "DOJ_STAFF_ROLE_FK" FOREIGN KEY ("PERSON_ID")
       REFERENCES  "DOJ_PERSON" ("PERSON_ID") ENABLE
 /

 "PERSON_ROLE_ID","PERSON_ID","STAFF_ROLE","STAFF_TITLE","DATE_ASSIGNED","DATE_SUSPENDED"
 "21","16","OFFICER","OFC.","02/25/2014",""
 "1","1","DETECTIVE","DET.","02/01/2014",""
 "2","8","INVESTIGATOR","LT.","02/04/2014",""
 "22","11","INVESTIGATOR","SGT.","02/25/2014",""
 "23","5","OFFICER","OFC.","01/15/2014",""

DOJ_CRIME_REPORT表

 CREATE TABLE  "DOJ_CRIME_REPORT" 
    (   "REPORT_ID" NUMBER(10,0) NOT NULL ENABLE, 
     "CRIME_NO" NUMBER(10,0) NOT NULL ENABLE, 
     "INVESTIGATOR" NUMBER(10,0) NOT NULL ENABLE, 
     "FILE_ID" VARCHAR2(50), 
     "DISPOSITION" VARCHAR2(40), 
     "CRIME_DESCRIPTION" VARCHAR2(100) NOT NULL ENABLE, 
     "REPORT_DATE" DATE NOT NULL ENABLE, 
      CONSTRAINT "DOJ_CRIME_REPORT_PK" PRIMARY KEY ("REPORT_ID") ENABLE
    )
 /
 ALTER TABLE  "DOJ_CRIME_REPORT" ADD CONSTRAINT "DOJ_CRIME_REPORT_FK" FOREIGN KEY
 ("CRIME_NO")
  REFERENCES  "DOJ_CRIME" ("CRIME_NO") ENABLE
 /
 ALTER TABLE  "DOJ_CRIME_REPORT" ADD CONSTRAINT "DOJ_CRIME_REPORT_FK2" FOREIGN KEY 
 ("INVESTIGATOR")
  REFERENCES  "DOJ_STAFF_ROLE" ("PERSON_ROLE_ID") ENABLE
 /


 "REPORT_ID","CRIME_NO","INVESTIGATOR","FILE_ID","DISPOSITION","CRIME_DESCRIPTION","REPORT_DATE"
 "1","4","21","AFK-TCPIP-1025","FILED","Responded to call for backup at a Liberty City residence.  Detained suspect for further questioning.","02/01/2014"

DOJ_CRIME_ASSOC表

 CREATE TABLE  "DOJ_CRIME_ASSOC" 
    (   "CRIME_ASSOC_ID" NUMBER(10,0) NOT NULL ENABLE, 
     "REPORT_ID" NUMBER(10,0) NOT NULL ENABLE, 
     "PERSON_ID" NUMBER(10,0) NOT NULL ENABLE, 
     "PRIMARY_ROLE" VARCHAR2(40) NOT NULL ENABLE, 
      CONSTRAINT "DOJ_CRIME_ASSOC_PK" PRIMARY KEY ("CRIME_ASSOC_ID") ENABLE, 
      CONSTRAINT "DOJ_CRIME_ASSOC_UK1" UNIQUE ("REPORT_ID", "PERSON_ID", "PRIMARY_ROLE") ENABLE
    )
 /
 ALTER TABLE  "DOJ_CRIME_ASSOC" ADD CONSTRAINT "DOJ_CRIME_ASSOC_FK" FOREIGN KEY ("REPORT_ID")
      REFERENCES  "DOJ_CRIME_REPORT" ("REPORT_ID") ENABLE
 /
 ALTER TABLE  "DOJ_CRIME_ASSOC" ADD CONSTRAINT "DOJ_CRIME_ASSOC_FK2" FOREIGN KEY ("PERSON_ID")
  REFERENCES  "DOJ_PERSON" ("PERSON_ID") ENABLE
 /       


 "CRIME_ASSOC_ID","REPORT_ID","PERSON_ID","PRIMARY_ROLE"
 "22","1","18","WITNESS"
 "1","1","22","VICTIM"
 "21","1","3","SUSPECT"
 "2","1","12","WITNESS"

将DOJ架构设计集成到Oracle Application Express(APEX)中

这是使用此架构在APEX中设计的示例“犯罪报告”。 复杂的搜索页面可以通过犯罪数据库的其他离散值进行搜索。 基于REPORT_ID报告将是基本搜索条件之一,可能看起来像这样:

犯罪报告按报告ID(TOP)

Oracle APEX设计的犯罪报告,第一部分

犯罪报告(按报告ID)(结束)

Oracle APEX设计的犯罪报告,结尾部分

涉及的较大查询之一是标题为“报告信息”的查询。 尽管如此,每个所涉及实体之间的数据关系中的联接较少,灵活性更高:

报表信息区域SQL查询

 select DOJ_CRIME_REPORT.REPORT_ID as REPORT_ID,
     DOJ_CRIME_REPORT.CRIME_NO as CRIME_NO,
     DOJ_STAFF_ROLE.STAFF_TITLE || ' ' || 
     DOJ_PERSON.PERSON_NAME as ASSIGNED_STAFF,
     DOJ_CRIME_REPORT.FILE_ID as FILE_ID,
     DOJ_CRIME_REPORT.DISPOSITION as DISPOSITION,
     DOJ_CRIME_REPORT.CRIME_DESCRIPTION as CRIME_DESCRIPTION,
     DOJ_CRIME_REPORT.REPORT_DATE as REPORT_DATE 
  from DOJ_PERSON DOJ_PERSON,
     DOJ_STAFF_ROLE DOJ_STAFF_ROLE,
     DOJ_CRIME_REPORT DOJ_CRIME_REPORT 
  where DOJ_CRIME_REPORT.INVESTIGATOR = DOJ_STAFF_ROLE.PERSON_ROLE_ID
     and DOJ_STAFF_ROLE.PERSON_ID = DOJ_PERSON.PERSON_ID
     and DOJ_CRIME_REPORT.REPORT_ID = :P13_REPORT_ID

评论与讨论

  • 为此解决方案创建NORMALIZED数据模式的方法将有助于构建用于创建各种犯罪报告以存储在此数据库中的LOV查询。

  • 合并诸如PERSONSROLES类的通用实体概念可以减少联接的数量,并减少重复值的机会(即,在多个表中定义的同一个人)。

  • 关联表也减少了重复数据的创建。 这些链接实体中唯一存储的是唯一的ID值/键。

  • 利用APEX页面设计,使用不同的页面区域可将单个复杂的查询拆分为彼此独立的离散部分,但共用参考键/ ID除外。 (例如REPORT_ID )。 这将跳过大多数用于管理可选数据关系的外部联接。

  • 提示:构建共享LOV查询,而不是在输入页面上的每个项目中进行编码。 这些值中的许多会多次使用,否则会导致不必要的重复。

编码愉快!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM