Oracle 19c换行调用存储过程触发ORA-06550错误原因咨询
问题:Toad(Oracle 19c)中换行调用存储过程触发ORA-06550错误的原因
存储过程代码
CREATE OR REPLACE PROCEDURE ITMS.SP_ADD_FOREIGN_KEY_CONSTRAINT_AUTO ( P_TABLE_NAME VARCHAR2, P_COLUMN_NAME VARCHAR2) IS BEGIN EXECUTE IMMEDIATE 'ALTER TABLE ' || P_TABLE_NAME || ' ADD CONSTRAINT ' || P_TABLE_NAME || '_' || SUBSTR(P_COLUMN_NAME,1, INSTR(P_COLUMN_NAME,'_ID')-1) || '_FK FOREIGN KEY (' || P_COLUMN_NAME || ') REFERENCES ' || SUBSTR(P_COLUMN_NAME,1, INSTR(P_COLUMN_NAME,'_ID')-1) || '(ID)'; END;
正常调用语句(执行成功)
EXEC SP_ADD_FOREIGN_KEY_CONSTRAINT_AUTO('DTMS_BA_VOLUME_DISCOUNT_DETAILS','REF_BUSINESS_ASSOCIATE_ID')
报错的调用语句
EXEC SP_ADD_FOREIGN_KEY_CONSTRAINT_AUTO('DTMS_BA_VOLUME_DISCOUNT_DETAILS', 'REF_BUSINESS_ASSOCIATE_ID') `
触发的错误信息
ORA-06550: line 1, column 76: PLS-00103: Encountered the symbol ";" when expecting one of the following:
错误原因
- 报错的调用语句末尾多了一个反引号(`),这是Oracle SQL语法中不允许的非法字符,会干扰解析器对语句的正常识别。
- Oracle解析器会将这个反引号视为语句的一部分,错误判断语句的结束位置,进而抛出语法错误提示。去掉该多余的反引号后,换行调用的语句即可正常执行。
修正后的调用语句
EXEC SP_ADD_FOREIGN_KEY_CONSTRAINT_AUTO('DTMS_BA_VOLUME_DISCOUNT_DETAILS', 'REF_BUSINESS_ASSOCIATE_ID')
内容的提问来源于stack exchange,提问作者Garvit Vashisth
相关产品推荐
相关产品推荐

