0

START_TIME および END_TIME という列を使用して、Oracle アプリケーション ビルダーでフォームを作成しようとしています。

フォームを表示しようとすると、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
/

日付を変更できません

私のフォームは次のソースを使用しています:

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"

ただし、エラーが発生します:

「ビルダー内でクエリを解析できません。クエリが構文的に正しいと思われる場合は、領域ソースの下にある [汎用列] チェックボックスをオンにして、解析せずに続行してください。ORA-00904: "B": 無効な識別子」

「b」変数を START_TIME に変更すると、エラーが発生します。

クエリ列 #5 (TO_CHAR("START_TIME",'HH24:MI:SS')) は無効です。列エイリアスを使用してください

4

3 に答える 3

1

select ステートメントで式を使用すると、射影の各列には一意の名前が必要なため、Oracle は式を使用して識別子を導出します。SQL*Plus の列見出しをチェックして、この sin アクションを確認してください。

ただし、一部のクライアントは、これらの派生識別子を好まず、Oracle の命名規則に準拠した適切な名前を求めています。Forms Builder はそのようなツールの 1 つです。

そのエラーメッセージは、

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 列にコピーするときに、書式設定された START_TIME を入力します。

于 2013-02-19T13:07:30.697 に答える
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 に答える
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 に答える