开发环境
名称 | 版本 |
---|---|
操作系统 | 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 invalid
ORA-06550: 第 14 行, 第 3 列:
PL/SQL: Statement ignored
ORA-06550: 第 20 行, 第 3 列:
PLS-00905: object P_OST_STAT_STAFF is invalid
ORA-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.sql
Package created
678
问题分析
命令行下执行,需要提交,这个存储过程最后没有加上提交的代码,所以没有提示
问题解决
修改存储过程 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.sql
Package created
Package body created
通过 show error 命令显示编译报错问题
在命令行中运行 @D:\DBScript\01_tpsdata_alt_package_P_OST_STAT_STAFF.sql
,提示错误
Package created
Warning: Package body created with compilation errors
再次执行 show error
命令,显示错误原因
SQL> show error
Errors for PACKAGE BODY P_OST_STAT_STAFF:
LINE/COL ERROR
-------- ----------------------------------------------------------------
654/12 PLS-00905: 对象 XXXXX@TEST_DBLINK 无效
654/7 PL/SQL: Statement ignored