Oracle为什么触发器在被称为时间戳的字段中失败?
技术问答
275 人阅读
|
0 人回复
|
2023-09-14
|
我只是浪费了过去的两个小时,试图根据教程创建一个自动增加主键的表。这个教程很棒。我遇到的问题是,如果我有一个列,目标就会失败。这是一个时间戳和一个在同一个表中被称为时间戳的表…
" f; H" r2 f) q2 a: Y- ]6 f9 T创建表时,oracle为什么不把它标记为问题?9 }, m# [# D, p' G }
这是我输入的命令序列:
) G* e5 M, P8 b; g/ o5 M* Y! Y. s9 j[ol]创建表:
' r8 b0 {+ z7 o2 \: l* d6 r" g: ?& XCREATE TABLE myTable(id NUMBER PRIMARY KEY,- J5 V7 F& [$ g6 g
field1 TIMESTAMP(6),
! ?; {# e* |( p0 S" }. y7 }& u timeStamp NUMBER,* U u% G3 u& g5 Z# O- S3 ]
);创建序列:
4 [% j' t7 l8 H% E% h- n' j% e2 q, nCREATE SEQUENCE test_sequenceSTART WITH 1" s5 m4 i1 b- q2 H
INCREMENT BY 1;创建触发器:
S& F; k. F% [( O+ JCREATE OR REPLACE TRIGGER test_triggerBEFORE INSERT" T8 e: d8 f( x& J% R
ON myTable
6 H) M `+ v# J+ D0 `+ U/ _REFERENCING NEW AS NEW
8 T0 Z8 g' _( e4 M. }FOR EACH ROW2 w( F) z$ O. G+ d% P' u& c- Y# q0 T5 P& o
BEGIN
+ L8 [0 m1 g4 ^1 J9 L: A1 ]" J" BSELECT test_sequence.nextval INTO :NEW.ID FROM dual;
' m* u, L+ I' u. m( [END;1 a8 g+ O$ Q9 m
/( B0 J3 q, L% I3 U" V$ m7 u
[/ol]这是我收到的错误消息:
+ C3 v6 l5 C0 p$ _3 r( y1 f0 f- MORA-06552: PL/SQL: Compilation unit analysis terminatedORA-06553: PLS-320: the declaration of the type of this expression is incomplete or malformed没有两行有单词 timestamp任何组合都可以正常工作。我认为语法足以区分关键字和列名。
. U u( h; d' {( v$ B4 B9 F. C% B* v4 m正如我所说,我不明白为什么手表创造得很好,但当我试图创建触发器时,oracle崩溃了……) C6 x3 o" \0 S
澄清说明; _! C" f, V `. n( S: T
我知道有一个问题叫做timestamp列,列可能是关键字,也可能不是关键字。我的问题是为什么我试图创建触发器,而不是在创建表时拒绝它,所以我至少希望得到警告。5 L1 {' D/ c- p- d7 T9 U) y
也就是说,使用Oracle几个小时后,它的错误报告似乎不那么冗长,也许只是因为我用它Express版本。7 U, O$ E% Y0 d% @9 L
如果这是Oracle错误,那么不支持合同的人会如何报告错误呢?我只是在玩快速版本,因为我必须从一些代码开始MySQL迁移到Oracle。
6 {' d6 ]' l" J ( x1 l% D6 m& j+ ?) F- e- B2 r
解决方案:
, [+ ^( n" y- G! S 以下是有关metalink的有关此(227615.1)摘录注释:% L8 b' \6 B r& e% c) Y9 J
this error will still be produced. fix: Workaround: 1. Rename the column to a non-reserved word. 2. Create a view and alias the column to a different name. this error will still be produced. fix: Workaround: 1. Rename the column to a non-reserved word. 2. Create a view and alias the column to a different name. |
|
|
|
|
|