0

我正在尝试在 oracle 应用程序生成器中创建一个表单,其中包含一个名为 START_TIME 和 END_TIME 的列。

现在,当我尝试查看表单时,我只能将其视为 DATES,而无法输入任何 HOURS 或 MINUTES。

我的表构造如下:

CREATE TABLE  "MACHINE_SCHEDULE" 
   (    "SCHEDULE_NUMBER" VARCHAR2(100 CHAR), 
    "MACHINE_NO" VARCHAR2(10 CHAR), 
    "MACHINE_USE_DATE" DATE, 
    "START_TIME" DATE, 
    "END_TIME" DATE, 
    "PROCESS" VARCHAR2(164 CHAR), 
    "BATCH_NO" VARCHAR2(10 CHAR), 
    "MATERIAL_BAR_NO" NUMBER(8,0), 
    "TECHNICIAN_STAFF_NO" VARCHAR2(15 CHAR), 
     CONSTRAINT "MACHINE_SCHEDULE_PK" PRIMARY KEY ("SCHEDULE_NUMBER") ENABLE
   )
/
ALTER TABLE  "MACHINE_SCHEDULE" ADD CONSTRAINT "MACHINE_SCHEDULE_CON" FOREIGN KEY ("TECHNICIAN_STAFF_NO")
      REFERENCES  "MODULE_TECHNICIAN" ("TECHNICIAN_STAFF_NO") ENABLE
/
ALTER TABLE  "MACHINE_SCHEDULE" ADD CONSTRAINT "MACHINE_SCHEDULE_FK" FOREIGN KEY ("BATCH_NO")
      REFERENCES  "BATCH" ("BATCH_NO") ENABLE
/
ALTER TABLE  "MACHINE_SCHEDULE" ADD CONSTRAINT "MACHINE_SCHEDULE_FK2" FOREIGN KEY ("MATERIAL_BAR_NO")
      REFERENCES  "MATERIAL_BAR" ("MATERIAL_BAR_NO") ENABLE
/

CREATE OR REPLACE TRIGGER  "BI_MACHINE_SCHEDULE" 
  before insert on "MACHINE_SCHEDULE"               
  for each row  
begin   
  if :NEW."SCHEDULE_INSTANT_NUMBER" is null then 
    select "MACHINE_SCHEDULE_SEQ".nextval into :NEW."SCHEDULE_INSTANT_NUMBER" from dual; 
  end if; 
end; 

/
ALTER TRIGGER  "BI_MACHINE_SCHEDULE" DISABLE
/

我无法修改 DATE

我的表格使用以下来源:

select 
"SCHEDULE_NUMBER",
"SCHEDULE_NUMBER" SCHEDULE_NUMBER_DISPLAY,
"MACHINE_NO",
"MACHINE_USE_DATE",
"START_TIME" as b,
TO_CHAR(b, 'HH24:MI:SS'),
"END_TIME",
"PROCESS",
"BATCH_NO",
"MATERIAL_BAR_NO",
"TECHNICIAN_STAFF_NO"
from "#OWNER#"."MACHINE_SCHEDULE"

但是它给出了错误:

“无法在 Builder 中解析查询。如果您认为查询在语法上是正确的,请选中区域源下方的“通用列”复选框以继续而不进行解析。ORA-00904:“B”:无效标识符”

如果我将“b”变量更改为 START_TIME,则会出现错误:

查询列 #5 (TO_CHAR("START_TIME",'HH24:MI:SS')) 无效,使用列别名

4

3 回答 3

1

当我们在 select 语句中使用表达式时,Oracle 使用该表达式来派生一个标识符,因为投影中的每一列都必须有一个唯一的名称。检查 SQL*Plus 中的列标题以查看此操作。

然而,一些客户不喜欢这些派生标识符,并且想要符合 Oracle 命名约定的漂亮名称。Forms Builder 似乎就是这样一种工具。

所以那个错误信息,

query column #5 (TO_CHAR("START_TIME",'HH24:MI:SS')) is invalid, use column alias

告诉你给表达式一个别名,即

"START_TIME" ,
TO_CHAR("START_TIME", 'HH24:MI:SS') as b,

只是我建议你使用更有意义的东西,比如 START_TIME_FMT。


我无法在新列中输入任何详细信息。它显示为“NULL”

我认为这种行为是因为它是一个派生字段。因此,您需要做的是将其从查询中删除并改用非表项。当您从数据库中检索记录并使用触发器在插入或更新后将其值复制到(隐藏的)START_TIME 列时,使用 Formatted START_TIME 填充它。

于 2013-02-19T13:07:30.697 回答
0

此外:

-- This will never work --
SELECT SYSDATE as b, to_char(b, 'HH24:MI:SS') tme
 FROM dual
/

Output: ORA-00904: "B": invalid identifier


-- This will work --
SELECT to_char(b, 'HH24:MI:SS') tme
  FROM
 (
  SELECT SYSDATE as b
    FROM dual
 )
/

Output: 10:09:02
于 2013-02-19T15:11:01.247 回答
0

TO_CHAR 中字段的双引号引起了您的问题。事实上,你不需要它们中的任何一个。APEX 中的查询构建器对双引号有点生气!

试试这个:

select 
SCHEDULE_NUMBER,
SCHEDULE_NUMBER SCHEDULE_NUMBER_DISPLAY,
MACHINE_NO,
MACHINE_USE_DATE,
START_TIME as b,
TO_CHAR(START_TIME,'HH24:MI:SS'),
END_TIME,
PROCESS,
BATCH_NO,
MATERIAL_BAR_NO,
TECHNICIAN_STAFF_NO
from #OWNER#.MACHINE_SCHEDULE
于 2013-02-28T22:05:17.640 回答