也遭遇 PLS-00302: component 'SET_NO_OUTLINES' must be declared

数据平台A需要从其他业务系统B取一个接口数据,最开始是通过文件的形式交互的。

后来因为业务需要,业务系统B开放了一个查询账号供数据平台A使用。

因为两个平台的数据库位于不同的服务器上,而且生产平台上均不允许使用dblink进行数据操作。

所以最直接的想法就是写个Shell脚本把B的数据exp出来,然后imp到A上去。

 

结果就遇到了如下提示:

EXP-00056: ORACLE error 6550 encountered
ORA-06550: line 1, column 41:
PLS-00302: component 'SET_NO_OUTLINES' must be declared
ORA-06550: line 1, column 15:
PL/SQL: Statement ignored
EXP-00000: Export terminated unsuccessfully

 

网上一查,基本上都是因为进行导出的数据库客户端版本与被导出的数据库版本不一致。而且均无解。

 

以下为引用:

 

在metalink找到原因,需要用旧版本exp来导出数据(服务器Oracle为9i2,客户端我用的是Oracle10g。换到Oracle9i2就没问题了。)
Cause
Use of Higher Version Export utility (10.2.0.1) on Lower version database(9.2.0.6).

This problem occurs when using 10.2 Exp utility for 10.1,9.2,8.1.7 databases.

Solution
As per compatibility Matrix,You need to use the export utility of the lower version of source and target database.

总结一下:高版本的Client 连接 低版本的Server,无法使用exp及imp命令。


需要用旧版本exp来导出数据(服务器Oracle为9i2,客户端我用的是Oracle10g。换Oracle9i2就没问题了。) 

 

 

使用select * from v$version;指令查询目标服务器B的信息

Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE    9.2.0.3.0       Production
TNS for IBM/AIX RISC System/6000: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

 

而我进行操作的环境是10.2.0.1.0。

 

判断自己客户端版本的方法:

在cmd或Linux字符界面下直接输入sqlplus,可得到版本信息

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Mar 12 20:11:22 2011

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

Enter user-name:

 

 

最终的方案还是交给了ETL进行数据抽取。

发布了213 篇原创文章 · 获赞 5 · 访问量 57万+
展开阅读全文

PROCEDURE SCOTT.TEST_POR 编译错误 错误:PLS-00302: 必须声明 'GET_ELEM' 组件 ?

06-19

# 编译存储过程报错,提示我,必须先声明get_elem组件 问题描述:自己在学习json的相关知识,其中有一个是利用pl/sql解析json格式的数据,根据教程写了一个比较简单的存储过程,编译的时候报错。 错误位置在最后一部分的for循环取数据的时候。 ![图片说明](https://img-ask.csdn.net/upload/201906/19/1560904058_520755.png) 经过检查,发现json_list中有这个get_elem方法,被注释掉了,如何启用? ![图片说明](https://img-ask.csdn.net/upload/201906/19/1560905835_363622.png) 具体代码如下: ``` CREATE OR REPLACE PROCEDURE TEST_POR AS --准备工作 G_JSON_VACHAR VARCHAR2(4000); --声明存储json数据的的g_json_varchar G_JSON_ALL JSON; --声明json格式,存储整个json G_JSON_PART JSON; --存储部分数据 applelist G_JSON_LIST JSON_LIST; --存放json_list列表 G_MARKETCODE VARCHAR2(8); G_MARKETNAME VARCHAR2(20); G_ADDRESS VARCHAR2(40); G_TEL VARCHAR2(15); G_NAME VARCHAR2(20); G_FRUITCODE VARCHAR2(20); BEGIN G_JSON_VACHAR := '{ "marketcode": "123456", "marketname": "好吃的水果店", "address": "一个好地方", "tel": "12345678901", "fruitlist": { "name": "apple", "fruitcode": "223344", "applelist": [ { "applename": "redapple ", "applecode": "111000", "price": "10" }, { "applename": "greenapple ", "applecode": "111111", "price": "12" }, { "applename": "yellowapple ", "applecode": "111222", "price": "8" } ] } }'; G_JSON_ALL := JSON(G_JSON_VACHAR); --获取第一层 G_MARKETCODE := JSON_EXT.GET_STRING(G_JSON_ALL, 'marketcode'); G_MARKETNAME := JSON_EXT.GET_STRING(G_JSON_ALL, 'marketname'); G_ADDRESS := JSON_EXT.GET_STRING(G_JSON_ALL, 'address'); G_TEL := JSON_EXT.GET_STRING(G_JSON_ALL, 'tel'); --获取第二层 G_NAME := JSON_EXT.GET_STRING(G_JSON_ALL, 'fruitlist.name'); G_FRUITCODE := JSON_EXT.GET_STRING(G_JSON_ALL, 'fruitlist.fruitcode'); --获取第三层,利用json_list来存放json列表 G_JSON_LIST := JSON_LIST(); G_JSON_PART := JSON(); --用来存放一部分的数据,applelist中的数据 G_JSON_LIST := JSON_EXT.GET_JSON_LIST(G_JSON_ALL, 'fruitlist.applelist'); --利用循环返回每个json部分的值 FOR I IN 1 .. G_JSON_LIST.COUNT LOOP --读取每个品种的具体信息 G_JSON_PART := JSON(G_JSON_LIST.GET_ELEM(I)); G_JSON_LIST. DBMS_OUTPUT.PUT_LINE(JSON_EXT.GET_STRING(G_JSON_PART, 'applename')); DBMS_OUTPUT.PUT_LINE(JSON_EXT.GET_STRING(G_JSON_PART, 'applecode')); DBMS_OUTPUT.PUT_LINE(JSON_EXT.GET_STRING(G_JSON_PART, 'price')); END LOOP; END; ``` 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览