sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 故障案例 >

【案例】Oracle报错PLS-00315 PLS-00377产生原因和MOS官方解决办法

时间:2016-11-11 20:38   来源:Oracle研究中心   作者:代某人   点击:

天萃荷净 PLS-00315实施限制:不支持的表索引类型
原因:在索引BINARY_INTEGER的,PLS_INTEGER,或VARCHAR2指定一个PL / SQL表声明,数据类型比其他条款。PL / SQL表可以有一列和主键。列可以有任何标量类型,但主键必须是一个二进制整数类型或VARCHAR2。

行动:使用索引条款在重点支持的类型之一。


PLS-00316 PL / SQL表必须使用一个单一的指数
原因:在索引一个PL / SQL表声明的条款,指定了一个复合主键。PL / SQL表必须有一个简单的,无名的二进制整数或主键VARCHAR2类型。

行动:使用索引条款在重点支持的类型之一。


PLS-00317类型不完全“ 串 “在其声明的地区未完成
原因:没有在声明的地区被宣布完成一个完整的类型声明。

行动:完成适当的类型,然后重试操作。


PLS-00318型“ 串 “是畸形的,因为它是一个非楼盘相互递归类型
原因:一个类型声明,如:

- 非楼盘递归类型
T类型的记录(在);



- 非楼盘相互依存的类型
T1类型;
T2类型的记录(T1);
T1类型的记录(T2);

被输入。

行动:使用另一种类型,以消除递归。


PLS-00319 IN或NOT IN子句中使用子查询必须包含一列
原因:使用无效的表达式,如X在选择甲,乙......。当一个[不] IN子句中使用子查询,它不测试集合成员。表达[] IN子句和子查询的选择列表必须匹配。因此,在上面的例子中,子查询必须指定一个列。

行动:更改子查询只选择一列。


PLS-00320这个表达式的类型的声明是不完整或畸形
原因:在一项声明中,一个变量或游标的名称拼写错误或声明向前参考。在PL / SQL不允许向前引用。必须声明一个变量或游标之前,它被引用在其他报表,包括其他声明语句。例如,下面的声明引起的dept_rec例外,因为它是指尚未宣布游标:

的DECLARE
dept_rec dept_cur%ROWTYPE的;
光标dept_cur选择......
...

行动:检查在声明中的所有标识符的拼写。如果有必要,移动的声明,因此,它使没有向前引用。


PLS-00321表达“ 串 “作为一个赋值语句的左边是不合适
原因:表达不指定一个变量,它可以分配给它的值。例如,函数SYSDATE不能出现左侧上一个赋值语句,如:

SYSDATE:= '01-JAN-1990“;

动作:纠正违法的赋值语句。


PLS-00322的常量'声明字符串 '必须包含一个初始化赋值
原因:缺乏一个初始值分配一个常量声明。例如,在下面的声明“:= 3.14159”初始化子句:

“圆周率常数:= 3.14159;

行动:更正所提供的失踪初始化分配的常量声明。


PLS-00323的子程序或游标' 串 '宣布在包装规格,必须在包体定义
原因:子程序规范被放置在一个包规范,但相应的子程序的尸体被放置在包体。包体实现的包装规格。因此,必须包含包体的包规范中声明的每一个子程序的定义。

动作:检查子程序名称的拼写。如果有必要,添加缺少的子程序体的包体。


PLS-00324游标属性可能并不适用于非光标“ 字符串 “
原因:这个错误发生时,游标的属性(“%”,“%NOTFOUND”,“%行”,“%IS_OPEN”,等等)出现后,游标或游标变量作为一个未声明的标识符。它的发生,例如,如果变量my_cur%的名称my_cur发现不正确声明游标,或者如果被放置在错误的块结构变量声明。

行动:检查拼写和声明的标识符。也证实该声明被放置在正确的块结构。


在这方面是不适当的PLS-00325非整数的数字文本字符串
原因:一个非整数值文字使用情况下,需要一个整数(没有小数点右边的数字)。

行动:更换整数的不适当的文字。


PLS-00326子句必须包含子查询的相同数量的表达式
原因:在IN子句中的表达式的数量并不等于在相应的子查询表达式的选择列表。例如,下面的语句是无效的,因为在子句包含两个表达式,但子查询的选择列表中只包含一个:

... WHERE(ENAME,SAL)IN(SELECT SAL FROM EMP);

行动:检查每个组中的表达,然后修改语句的数目相等。


PLS - 00327“ 字符串 “是在SQL范围不在这里
原因:在SQL语句中,提到了一个数据库对象范围。被引用的对象可能会拼写错误,或参考可能是混合的,如下面的例子中,

游标c1是从EMP SELECT dept.dname;

行动:检查SQL语句中的所有数据库对象的拼写,并确保所有引用是在当前范围内的对象。


PLS-00328的子程序体必须定义的前瞻性声明字符串。
原因:一个子程序规范申报,但没有规定相应的子程序体。作为一个单位编写的子程序规范和身体。另一种解决办法是分开的规范,从它身上,这是必要的,当你要定义相互递归子程序或你想在包组的子程序。

动作:检查子程序名称的拼写。如有必要,提供缺少子程序身体。


PLS-00329架构级别类型有非法参考字符串
原因:尝试了从模式级别类型架构级别类型以外的东西做一个参考。

行动:更换非法的参考,然后重试操作。


PLS-00330使用无效的类型名称或名称亚型
原因:被误常量,变量或表达式的地方使用的数据类型或亚型符。例如,代码可能看起来像这样:

如emp_count>号码,然后...  - 非法的;是一个数据类型
规范

行动:更换一个有效的常量,变量或表达式的数据类型或亚型符。


PLS-00331非法参考字符串
原因:以下情况之一:

非法参考一些用户SYS的对象。以非法方式使用其中之一
一个远程对象的类型非法参考
行动:删除参考。


PLS - 00332“ 字符串 “是不是一个合格的名称有效的前缀
原因:一个畸形的限定名指定,因为前缀是不正确的。

行动:删除或更改参考。


PLS - 00333“ 字符串 “,必须符合在这方面的一个对象表的别名
原因:名称,出现在一个楼盘或价值的背景下,没有解决一个对象表的别名。

行动:

如果没有对象的范围表,然后删除的楼盘或价值;或提供缺少的对象表参考。
如果有一个范围对象表,但你是不是指它,添加引用。

PLS-00334“ 串 “匹配的表或视图中没有一个别名
原因:没有别名的引用了一个表或视图的名称。

行动:更换对象表别名参考参考。


PLS-00335包名称冲突与现有的对象
原因:在CREATE package语句,包(组逻辑上相关的PL / SQL类型,对象和子程序)现有数据库对象的名称相同,这是一个数据库对象。

行动:给包一个唯一的名称。


PLS-00336非对象表“ 串 “在这方面的非法
原因:一个非对象表中指定一个楼盘或值调节。在这种情况下,这是不允许的。

行动:更换对象表别名参考参考。


PLS - 00337“ 串 “匹配太多的对象表的别名
原因:一个模棱两可的提到了一个对象表的别名;有至少有两个在同一范围内的对象表的别名。

行动:删除所有引用或更改其余的别名。


PLS-00338未能解决“ 字符串作为列或行中的表达“
原因:一个提到了一个名称,不能作为一列或行中的表达式解决。这发生在更新或插入语句涉及的对象表。

行动:如果这是一个更新语句,拟以代码作为一个列引用,修复等。如果你打算编写为连续表达,改变参考对象表的别名。


PLS-00339“ 串 “匹配对象没有一个楼盘或值调节表
原因:没有一个楼盘或值调节指定一个表对象的名称。

行动:如果您打算编写一个楼盘或值调节,添加修饰符;如果你打算编写此列引用,参考适当的改变,否则,删除的参考。


PLS-00341声明字符串 “ 光标“ 是不完整或畸形
原因:游标的声明是不恰当或不正确声明游标声明中引用一个标识符。可能已被指定返回类型,并不是指一个现有的数据库表或以前声明的游标或游标变量。例如,下面的游标声明是非法的,因为C1尚未完全定义:

光标C1回报C1%ROWTYPE的选择...  - 非法

在这种情况下,返回类型并没有被指定,因为它是隐含的。

行动:检查拼写和声明游标的名称和游标声明中引用任何标识符。也证实该声明被放置在正确的块结构。如果指定返回类型,确保它是指一个现有的数据库表或以前声明的游标或游标变量。


PLS-00351未记录到数据库' 字符串 '
原因:没有被记录试图访问Oracle数据库。可能是一个无效的用户名或密码输入。

行动:一个拼写正确的用户名和密码登录到Oracle试图访问数据库之前。


PLS-00352无法访问另一个数据库的字符串 “
原因:试图引用一个比目前的本地或远程Oracle数据库的数据库中的对象。

行动:更正参考,并确保对象是在当前的Oracle数据库。


PLS-00353' 串 '必须指定一个数据库中的用户
原因:这个错误发生时的用户名被拼错,或当用户在数据库中不存在的。

行动:检查用户名的拼写,并确保该用户是否存在。


PLS-00354的用户名必须是一个简单的标识符
原因:在这种情况下不准许合格的一个如scott.accts的用户名。

行动:指定如斯科特简单的用户名代替。


在这种情况下不允许PLS-00355使用PL / SQL表
原因:一个PL / SQL表是在错误的上下文引用(例如,与远程链接)。

行动:删除的PL / SQL表引用或更改上下文。


PLS-00356' 串 '必须命名一个表,该用户具有访问
原因:命名表是用户无法访问。这个错误发生时的表名或用户名被拼错,表和/或用户不存在于数据库中,用户没有被授予必要的权限,或表名重复一个局部变量或循环计数器的名称。

行动:检查的表的名称和用户名的拼写。用户还确认表和用户的存在,有必要的权限,并表的名称不重复一个局部变量或循环计数器的名称。


在这种情况下不允许PLS-00357表,视图或序列引用'的字符串 “
原因:一个数据库表,视图或序列引用是在不适当的情况下发现的。这种提法,只能出现在SQL语句(不包括序列)或%TYPE和%ROWTYPE声明。一些有效的例子如下:

选择ENAME,emp.deptno,DNAME成my_ename,my_deptno,my_dept
从EMP,DEPT其中emp.deptno = DEPT.DEPTNO;
的DECLARE
LAST_NAME emp.ename%类型;
dept_rec部%ROWTYPE的;

行动:拆除或搬迁的非法参考。


PLS-00358列' 串 '存在于多个表使用限定符
原因:该声明是含糊不清的,因为它指定两个或多个表具有相同的列名。例如,下面的语句DEPTNO是模糊的,因为是在两个表中的列:

选择LOC DEPTNO,成my_deptno,my_loc的的EMP,DEPT;

行动:列名前面加上表的名字(如在emp.deptno),使列引用是毫不含糊的。


PLS-00359“任务目标字符串 “必须有组件
原因:宣布赋值的目标,缺乏存储分配的值所需的组件。例如,发生此错误,如果你尝试指定行的列值,而不是一个记录变量,如下:

的DECLARE
dept_rec部%ROWTYPE的;
my_deptno DEPT.DEPTNO%类型;
... 开始探索INQUIRY my_deptno选择DEPTNO,DNAME,LOC  - 无效
从部...

行动:检查赋值的目标和它的所有组件的名称的拼写。确保分配目标所需的组件和声明,声明被放置在正确的块结构。


PLS-00360游标声明中没有身体需要返回类型
原因:缺乏一个游标声明一个身体(SELECT语句)或返回类型。如果你想从它身上分离光标规范,返回类型必须提供,如:

光标C1返回EMP%ROWTYPE的;

行动:添加一个SELECT语句或返回类型的游标声明。


在光标“PLS-00361 字符串 “不能OPEN'ed
原因:一个模式中的光标参数不能被修改,因此无法打开。

行动:更改光标的参数,IN OUT模式或OUT。


PLS - 00362无效的游标返回类型' 字符串 '必须是一个记录类型
原因:在光标的规范或REF CURSOR类型的定义,NUMBER或表如非记录类型作为返回类型指定。这是不允许的。只有以下的返回类型是允许的:

record_type_name
record_name%类型
TABLE_NAME%ROWTYPE的
cursor_name%ROWTYPE的
cursor_variable_name游标%ROWTYTPE
行动:修改光标规范或REF CURSOR类型的定义,以便它指定一个以上的返回类型。


PLS-00363表达' 串 '不能作为赋值的目标
原因:文字,常数,IN参数,循环计数器,或函数调用被误用于分配的目标。例如,下面的语句是非法的,因为赋值的目标,30岁,是一个文字:

选择30部的WHERE DEPTNO ...  - 非法

行动:更正声明,通过使用有效的分配目标。


PLS-00364的循环索引变量的字符串使用的是无效的
原因:在不适当的情况下发现一个循环计数器的参考。例如,下面的语句是非法的,因为在其自己的范围内表达的终值循环计数器:

于1 J .. j循环...  - 非法

行动:更改循环的范围内表达,因此,它不引用循环计数器。如果你想参考范围内的表达与另一个变量作为循环计数器的名称相同,更改名称或合格标签的变量名。


PLS - 00365“ 字符串 “是一个OUT参数,并不能读取
原因:试图分配一个OUT参数值的另一个参数或变量。在过程中,一个OUT参数,就像一个未初始化的变量,因此,其价值无法读取。例如,下面的赋值是非法的:

的程序calc_bonus(奖金出真正的,...)是
    评级实;
    实际工资;  
动工
    ...
    IF等级> 90 THEN
        奖金:奖金* 2;  - 非法
        选择SAL成从EMP工资+奖金...  - 非法
        ...
    END IF;
    ...   
完calc_bonus;

行动:在OUT参数中使用,而不是OUT参数。里面的一个程序,在OUT参数的行为像一个初始化的变量,因此,其价值可以读取。


PLS-00366的一个NOT NULL类型的亚型还必须为NOT NULL
原因:经过亚型被定义为NOT NULL,它被用来作为基本类型定义为NULL的另一个亚型。这是不允许的。例如,代码可能看起来像这样:

的DECLARE
亚型平日是INTEGER NOT NULL的;
亚型周末是平日的NULL;  - 非法

而不是:

的DECLARE
亚型平日是INTEGER NOT NULL的;
亚型周末是平日;

行动:修改亚型的定义,以消除冲突。


PLS-00367也不例外名称与RAISE语句必须是内部异常处理程序
原因:不加薪声明异常名以外发现异常处理程序。

行动:删除RAISE语句,搬迁到异常处理程序,或提供缺少的异常的名称。


PLS-00368 RAISE语句,' 字符串 '必须是一个例外名称
原因:在RAISE语句的标识符是不是一个有效的异常的名称。

行动:确保在RAISE语句的标识符被宣布为异常,并正确放置在块结构。如果您使用的是一个PL / SQL预定义的异常的名称,检查其拼写。


PLS-00369没有选择选择其他可能出现的异常处理程序
原因:一个构造形式:

当excep1或其他=>

遇到异常处理程序的定义。其它处理程序必须出现本身作为一个块的最后一个异常处理程序。

行动:将与他人出现的标识符,该标识符写一个单独的异常处理程序。


PLS-00370其它处理程序必须是最后一个块的异常处理中
原因:出现一个或多个异常处理后,其他处理程序。然而,其他的处理程序必须在一个块的最后一个处理或子程序,因为它是充当特别是未命名的所有异常的处理程序。

行动:将他人处理程序,以便它遵循所有具体的异常处理。


PLS-00371最'声明字符串 “允许在声明部分
原因:标识符的引用是不明确的,因为它有冲突的声明,在一个块,过程或函数的声明部分。最多的一个标识符的声明是允许在一个声明的一部分。

行动:检查标识符的拼写。如有必要,删除所有,但一个标识符声明。


PLS-00372 RETURN语句在一个过程中,不能包含表达式
原因:在一个过程中,RETURN语句包含一个表达式,这是不允许的。函数,RETURN语句必须包含一个表达式,因为它的价值被分配到函数标识符。然而,在过程中,RETURN语句让你退出程序正常结束前达成。

行动:从RETURN语句表达,或重新作为一个函数的过程。


PLS-00373 EXIT标签的字符串 '必须标注循环语句
原因:在一个EXIT语句的标签并不是指一个循环。EXIT语句不需要指定一个标签。然而,如果一个标签指定(退出my_label),它必须是指一个循环语句。

行动:确保标签的名称拼写是否正确,它是指一个循环语句。


PLS - 00374非法出境的语句;它必须出现在标有“循环字符串 “
原因: EXIT语句不需要指定一个标签。然而,如果指定一个标签(如在退出my_label),EXIT语句必须是该标签指定的环路内。

行动:确保标签的名称拼写是否正确,如果有必要,将里面的标签是指循环EXIT语句。


PLS-00375非法GOTO语句;转到不能跳转到标签' 串 '
原因:陪同错误消息的行数和列数是指一个GOTO以外的分支结构(循环或异常处理程序,例如),它包含一个语句序列标签内,语句序列。这样一个分支,是不允许的。

行动:移动GOTO语句内的语句序列或移动外标记语句的语句序列。


PLS - 00376非法出境的语句;它必须出现在一个循环内
原因: EXIT语句是一个循环结构之外。EXIT语句用于循环和过早退出,因此必须始终出现在一个循环。

行动: EXIT语句删除或置于内循环。


PLS-00377内部类型PLS_INTEGER不包括在此版本的PL / SQL
原因:在一项声明中使用的类型名称的整数。

行动:请不要使用。

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【案例】Oracle报错PLS-00315 PLS-00377产生原因和MOS官方解决办法

本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/1241.html

Oracle研究中心

关键词:

PLS-00315

PLS-00377