2013-02-19 39 views
0

我正在尝试在名为START_TIME和END_TIME的列的Oracle应用程序构建器中创建一个表单。Oracle中的小时格式

现在,当我尝试查看表单时,我只能将它看作DATES,并且无法输入任何HOURS或MINUTES。

我的表是构造如下:但是它给人的erorr

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" 

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 
/

我不能修改日期

我的表单使用如下因素的来源

"Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA-00904: "B": invalid identifier"

如果更改“B”变量START_TIME它给出了错误:

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

+0

它会告诉你给列一个别名,会发生什么,当你做了吗?即'TO_CHAR(“START_TIME”,'HH24:MI:SS')作为“ST”,' – 2013-02-19 13:04:57

+0

你确定这不是引起你的双引号吗? – 2013-02-19 13:25:11

+0

@DanBracuk双引号由Oracle在创建列时生成,所以我无法更改它,AFAIK。 – 2013-02-19 13:30:10

回答

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 
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。


I cannot enter any detail in the new column. It is displayed as "NULL"

我pesume这种行为是因为它是一个衍生领域。所以你需要做的是从查询中删除它,并使用非表项。当您从数据库检索记录并使用触发器在插入或更新后将其值复制到(隐藏)START_TIME列时,使用格式化的START_TIME填充它。

+0

我已经这样做了,但是我不能在新列中输入任何细节。它显示为“NULL”http://oi50.tinypic.com/do83ys.jpg – 2013-02-19 13:35:08

+0

我收到的错误是:mru内部例程错误:ORA-20001:错误在MRU:行= 1,ORA-01400:不能将MACHINE_SCHEDULE(SCHEDULE_NUMBER,MACHINE_NO,MACHINE_USE_DATE,END_TIME,PROCESS,BATCH_NO)插入到(“GROUP7_1”,“MACHINE_SCHEDULE”,“SCHEDULE_NUMBER”)中, ,“MATERIAL_BAR_NO”,“TECHNICIAN_STAFF_NO”)值(:b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8) – 2013-02-19 13:45:08

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