Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Help with trigger compilation errors

Re: Help with trigger compilation errors

From: Sergey Kaplun <skaplun_at_my-dejanews.com>
Date: Thu, 08 Apr 1999 16:25:54 GMT
Message-ID: <7eilaa$g8h$1@nnrp1.dejanews.com>


In article <7ed3ij$ted$1_at_nnrp1.dejanews.com>,   tim.mcconechy_at_runtime.dk wrote:
> Hello,
>
> This code usually works fine: CREATE OR REPLACE TRIGGER pdmlog_audit_info
> BEFORE INSERT OR UPDATE ON "PDMLOG" FOR EACH ROW BEGIN IF INSERTING THEN
> :new.user_name := user; :new.lastedit := sysdate; ELSIF UPDATING THEN
> :new.user_name := user; :new.lastedit := sysdate; END IF; END; /
ERROR at
> line 2: ORA-06552: PL/SQL: Compilation unit analysis terminated ORA-06553:
> PLS-320: the declaration of the type of this expression is incomplete or
> malformed
>
> I run this only changing pdmlog to the table name....
>
> For some reason the trigger won't work on two tables out of 130.
> PDMLOG is one of them...
>
> Here is the code to duplicate the problem.
>
> DROP TABLE "PDMLOG"
> /
>
> CREATE TABLE "PDMLOG" (
> "LOGNUM" number(6) NOT NULL,
> "USER" varchar2(5) NOT NULL,
> "PDMNAME" varchar2(5) NOT NULL,
> "DATABASE" varchar2(10) NOT NULL,
> "TYPE" varchar2(30) NULL,
> "DATE" date NOT NULL,
> "TIME" varchar2(8) NOT NULL,
> "MAINKEY" varchar2(125) NULL,
> "OLINEKEY" varchar2(180) NULL,
> "NLINEKEY" varchar2(180) NULL,
> "DATA" varchar2(2000) NULL,
> "STATUS1" varchar2(40) NULL,
> "STATUS2" varchar2(40) NULL,
> "ADMSTATUS" varchar2(40) NULL,
> "ADMSTATUS2" varchar2(40) NULL,
> "ADMCODE" varchar2(8) NULL,
> "CHANGED" NUMBER(10) NULL,
> "RECNO" number(20) NULL,
> "USER_NAME" number(2) NULL,
> "LASTEDIT" varchar2(20) NULL
> )
> PCTFREE 20
> PCTUSED 40
> /
>
> CREATE INDEX pdmlogmainkeyidx ON "PDMLOG" (mainkey)
>
> GRANT SELECT , INSERT , DELETE , UPDATE ON "PDMLOG" TO public
> /
>
> DROP SEQUENCE pdmlogseq
> /
>
> CREATE SEQUENCE pdmlogseq INCREMENT BY 1
> /
>
> CREATE OR REPLACE TRIGGER pdmlog_audit_info BEFORE INSERT OR UPDATE ON
> "PDMLOG" FOR EACH ROW BEGIN IF INSERTING THEN :new.user_name := user;
> :new.lastedit := sysdate; ELSIF UPDATING THEN :new.user_name := user;
> :new.lastedit := sysdate; END IF; END; /
>
> ERROR at line 2: ORA-06552: PL/SQL: Compilation unit analysis terminated
> ORA-06553: PLS-320: the declaration of the type of this expression is
> incomplete or malformed
>
> However , If I take another table....
> DROP TABLE "PICTURE"
> /
>
> CREATE TABLE "PICTURE" (
> "MAINKEY" varchar2(125) NOT NULL,
> "PICTPICT01" varchar2(100) NOT NULL,
> "FPICTCOM1" varchar2(40) NOT NULL,
> "CPICTCOM1" varchar2(40) NOT NULL,
> "PICTPICT02" varchar2(100) NOT NULL,
> "FPICTCOM2" varchar2(40) NOT NULL,
> "CPICTCOM2" varchar2(40) NOT NULL,
> "PICTPICT03" varchar2(100) NOT NULL,
> "FPICTCOM3" varchar2(40) NOT NULL,
> "CPICTCOM3" varchar2(40) NOT NULL,
> "PICTPICT04" varchar2(100) NOT NULL,
> "FPICTCOM4" varchar2(40) NOT NULL,
> "CPICTCOM4" varchar2(40) NOT NULL,
> "PICTPICT05" varchar2(100) NOT NULL,
> "FPICTCOM5" varchar2(40) NOT NULL,
> "CPICTCOM5" varchar2(40) NOT NULL,
> "PICTPICT06" varchar2(100) NOT NULL,
> "FPICTCOM6" varchar2(40) NOT NULL,
> "CPICTCOM6" varchar2(40) NOT NULL,
> "PICTPICT07" varchar2(100) NOT NULL,
> "FPICTCOM7" varchar2(40) NOT NULL,
> "CPICTCOM7" varchar2(40) NOT NULL,
> "PICTPICT08" varchar2(100) NOT NULL,
> "FPICTCOM8" varchar2(40) NOT NULL,
> "CPICTCOM8" varchar2(40) NOT NULL,
> "PICTPICT09" varchar2(100) NOT NULL,
> "FPICTCOM9" varchar2(40) NOT NULL,
> "CPICTCOM9" varchar2(40) NOT NULL,
> "PICTPICT10" varchar2(100) NOT NULL,
> "FPICTCOM10" varchar2(40) NOT NULL,
> "CPICTCOM10" varchar2(40) NOT NULL,
> "PICTPICT11" varchar2(100) NOT NULL,
> "FPICTCOM11" varchar2(40) NOT NULL,
> "CPICTCOM11" varchar2(40) NOT NULL,
> "PICTPICT12" varchar2(100) NOT NULL,
> "FPICTCOM12" varchar2(40) NOT NULL,
> "CPICTCOM12" varchar2(40) NOT NULL,
> "LASTEDIT1" varchar2(15) NULL,
> "LASTEDIT2" varchar2(15) NULL,
> "CHANGED" NUMBER(10) NULL,
> "RECNO" number(20) NULL,
> "USER_NAME" number(2) NULL,
> "LASTEDIT" varchar2(20) NULL
> )
> PCTFREE 20
> PCTUSED 40
> /
>
> DROP TABLE pictureimages
> /
>
> CREATE TABLE pictureimages ( MAINKEY varchar2(125) NOT NULL, CODE number(2)
> NOT NULL,PICGPICT LONG RAW NOT NULL) /
>
> CREATE INDEX pictureimagesidx ON pictureimages (MAINKEY)
> /
>
> CREATE INDEX picturemainkeyidx ON "PICTURE" (mainkey)
>
> GRANT SELECT , INSERT , DELETE , UPDATE ON "PICTURE" TO public
> /
>
> DROP SEQUENCE pictureseq
> /
>
> CREATE SEQUENCE pictureseq INCREMENT BY 1
> /
>
> CREATE OR REPLACE TRIGGER picture_audit_info BEFORE INSERT OR UPDATE ON
> "PICTURE" FOR EACH ROW BEGIN IF INSERTING THEN :new.user_name :=
user;
> :new.lastedit := sysdate; ELSIF UPDATING THEN :new.user_name := user;
> :new.lastedit := sysdate; END IF; END; /
>
> It works fine.....
>
> Can anyone help me????
> I trieed pdmlog instead of "PDMLOG"
>
> -----------== Posted via Deja News, The Discussion Network ==----------
> http://www.dejanews.com/ Search, Read, Discuss, or Start Your Own
>

SQL> DROP TABLE "PDMLOG"
  2 /

Table dropped.

SQL> ------------Don't use reserved word for column naming !!! ------- SQL> CREATE TABLE "PDMLOG" (

  2  "LOGNUM" number(6) NOT NULL,
  3  "USER" varchar2(5) NOT NULL,
  4  "PDMNAME" varchar2(5) NOT NULL,
  5  "DATABASE" varchar2(10) NOT NULL,
  6  "TYPE" varchar2(30) NULL,
  7  -------- Your mistake

  8 ---"DATE" date NOT NULL,
  9 --- Use,please, any other column's name
 10  "ANY_OTHER_IDENT" date not null,
 11  "TIME" varchar2(8) NOT NULL,
 12  "MAINKEY" varchar2(125) NULL,
 13  "OLINEKEY" varchar2(180) NULL,
 14  "NLINEKEY" varchar2(180) NULL,
 15  "DATA" varchar2(2000)  NULL,
 16  "STATUS1" varchar2(40) NULL,
 17  "STATUS2" varchar2(40) NULL,
 18  "ADMSTATUS" varchar2(40) NULL,
 19  "ADMSTATUS2" varchar2(40) NULL,
 20  "ADMCODE" varchar2(8) NULL,
 21  "CHANGED" NUMBER(10)  NULL,
 22  "RECNO" number(20) NULL,
 23  "USER_NAME" number(2) NULL,
 24  "LASTEDIT" varchar2(20) NULL

 25 )
 26 PCTFREE 20
 27 PCTUSED 40
 28 /

Table created.

SQL>
SQL> CREATE INDEX pdmlogmainkeyidx ON "PDMLOG" (mainkey)   2 /

Index created.

SQL>
SQL> GRANT SELECT , INSERT , DELETE , UPDATE ON "PDMLOG" TO public   2 /

Grant succeeded.

SQL>
SQL> DROP SEQUENCE pdmlogseq
  2 /

Sequence dropped.

SQL>
SQL> CREATE SEQUENCE pdmlogseq INCREMENT BY 1   2 /

Sequence created.

SQL>
SQL> CREATE OR REPLACE TRIGGER pdmlog_audit_info BEFORE INSERT OR UPDATE ON   2 "PDMLOG" FOR EACH ROW BEGIN IF INSERTING THEN :new.user_name := user;   3 :new.lastedit := sysdate; ELSIF UPDATING THEN :new.user_name := user;   4 :new.lastedit := sysdate; END IF; END;   5 /

Trigger created.

SQL> spool off
Best regards,
Sergey Kaplun.

-----------== Posted via Deja News, The Discussion Network ==---------- http://www.dejanews.com/ Search, Read, Discuss, or Start Your Own Received on Thu Apr 08 1999 - 11:25:54 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US