2013-02-19 37 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