开发环境
| 名称 | 版本 |
|---|---|
| 操作系统 | Windows 10 X64 |
| Oracle | win64_11gR2_database |
| PLSQL Developer | 11.0.4.1788(64 bit)01.179332 - Unlimited user license |
| Beyond Compare | 4 |
问题-已编译但有错误
问题描述
开发环境和测试环境分别创建了一个包 P_OST_STAT_STAFF,开发环境调用无误,测试环境调用报错
ORA-06550: 第 14 行, 第 3 列:PLS-00905: object P_OST_STAT_STAFF is invalidORA-06550: 第 14 行, 第 3 列:PL/SQL: Statement ignoredORA-06550: 第 20 行, 第 3 列:PLS-00905: object P_OST_STAT_STAFF is invalidORA-06550: 第 20 行, 第 3 列:PL/SQL: Statement ignored
查看包体和包定义,都显示 x
进入包定义,重新编译,报错
PACKAGE BODY P_OST_STAT_STAFF 编译错误错误:PLS-00905: object P_OST_STAT_STAFF is invalid错误:PLS-00304: cannot compile body of 'P_OST_STAT_STAFF' without its specification错误:PL/SQL: Compilation unit analysis terminated
问题分析
找到之前这个包的定义,和最新的定义使用 Beyond Compare 4 对比,发现之前的定义是
CREATE OR REPLACE PACKAGE P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;/CREATE OR REPLACE PACKAGE BODY P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;
现在的定义是
CREATE OR REPLACE PACKAGE P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;CREATE OR REPLACE PACKAGE BODY P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;
问题解决
在现在的定义包声明和包定义之间加上 /,再次创建
测试结果
查看包声明
查看包定义
调用也没有报错,问题解决
问题-命令行提交包不显示结果
问题描述
存储过程 01_tpsdata_alt_package_P_OST_STAT_STAFF.sql 如下
CREATE OR REPLACE PACKAGE P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;/CREATE OR REPLACE PACKAGE BODY P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;
直接在界面中点击执行,提示执行成功
在命令行中运行 @D:\DBScript\01_tpsdata_alt_package_P_OST_STAT_STAFF.sql,提示一个创建提示成功的信息后,显示了一个数字,就没提示了
SQL> @D:\DBScript\01_tpsdata_alt_package_P_OST_STAT_STAFF.sqlPackage created678
问题分析
命令行下执行,需要提交,这个存储过程最后没有加上提交的代码,所以没有提示
问题解决
修改存储过程 01_tpsdata_alt_package_P_OST_STAT_STAFF.sql 如下
CREATE OR REPLACE PACKAGE P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;/CREATE OR REPLACE PACKAGE BODY P_OST_STAT_STAFF IS-- 方法及存储过程END P_OST_STAT_STAFF;/
在命令行中运行 @D:\DBScript\01_tpsdata_alt_package_P_OST_STAT_STAFF.sql,提示执行成功
SQL> @D:\DBScript\01_tpsdata_alt_package_P_OST_STAT_STAFF.sqlPackage createdPackage body created
通过 show error 命令显示编译报错问题
在命令行中运行 @D:\DBScript\01_tpsdata_alt_package_P_OST_STAT_STAFF.sql,提示错误
Package createdWarning: Package body created with compilation errors
再次执行 show error 命令,显示错误原因
SQL> show errorErrors for PACKAGE BODY P_OST_STAT_STAFF:LINE/COL ERROR-------- ----------------------------------------------------------------654/12 PLS-00905: 对象 XXXXX@TEST_DBLINK 无效654/7 PL/SQL: Statement ignored