2016-12-28 3 views
0

So habe ich Verfahren, das ohne Problem kompiliert, aber wenn ich es laufen sie zurück:ORA-00911: ungültiges Zeichenproblem?

Error report - 
ORA-00911: invalid character 
ORA-06512: at "MYDATABASE.MY_PROCEDURE", line 4 
ORA-06512: at line 2 
00911. 00000 - "invalid character" 
*Cause: identifiers may not start with any ASCII character other than 
      letters and numbers. $#_ are also allowed after the first 
      character. Identifiers enclosed by doublequotes may contain 
      any character other than a doublequote. Alternative quotes 
      (q'#...#') cannot use spaces, tabs, or carriage returns as 
      delimiters. For all other contexts, consult the SQL Language 
      Reference Manual. 
*Action: 

Hier Verfahren

CREATE OR REPLACE PROCEDURE MY_PROCEDURE 
IS 
BEGIN 
EXECUTE IMMEDIATE 'ALTER TABLE CHILD_TABLE ADD CONSTRAINT FK_CHILD_TABLE_PARENT_TABLE FOREIGN KEY (PARENT_TABLE_ID) REFERENCES PARENT_TABLE(ID) ON DELETE CASCADE;'; 
END; 

Hier ist, wie ich es nennen :)

BEGIN 
MY_PROCEDURE; 
END; 

I kann erwähnen, dass es keinen Fehler in

ALTER TABLE CHILD_TABLE ADD CONSTRAINT FK_CHILD_TABLE_PARENT_TABLE FOREIGN KEY (PARENT_TABLE_ID) REFERENCES PARENT_TABLE(ID) ON DELETE CASCADE; 
gibt

Da es außerhalb der Prozedur Körper ohne Probleme läuft :)

+0

entfernen; innerhalb einer direkten Abfrage ausführen – Milaci

Antwort

2

die ; innerhalb einer Abfrage in EXECUTE IMMEDIATE entfernen:

CREATE OR REPLACE PROCEDURE MY_PROCEDURE 
IS 
BEGIN 
EXECUTE IMMEDIATE 'ALTER TABLE CHILD_TABLE ADD CONSTRAINT FK_CHILD_TABLE_PARENT_TABLE FOREIGN KEY (PARENT_TABLE_ID) REFERENCES PARENT_TABLE(ID) ON DELETE CASCADE'; 
END;