Oracle PLS-00201:必须在程序中声明标识符
我有一个PL/SQL过程代码,它在Oracle PLS-00201:必须在程序中声明标识符,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一个PL/SQL过程代码,它在/时运行,但在执行时不运行。我收到的错误消息是 SQL> EXECUTE MAXINUM; BEGIN MAXINUM; END; * ERROR at line 1: ORA-06550: line 1, column 7: PLS-00201: identifier 'MAXINUM' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored 我正在研
/
时运行,但在执行时不运行。我收到的错误消息是
SQL> EXECUTE MAXINUM;
BEGIN MAXINUM; END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'MAXINUM' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我正在研究的代码是:
DECLARE
N NUMBER;
M NUMBER;
O NUMBER;
P NUMBER;
X NUMBER;
PROCEDURE MAXINUM(N IN NUMBER, M IN NUMBER, O IN NUMBER, P IN NUMBER, X OUT NUMBER) IS
BEGIN
IF N>M AND N>O AND N>P THEN
X:=N;
ELSIF M>N AND M>O AND M>P THEN
X:=M;
ELSIF O>N AND O>M AND O>P THEN
X:=O;
ELSIF P>N AND P>M AND P>O THEN
X:=P;
END IF;
END;
BEGIN
N:=&NUMBER;
M:=&NUMBER;
O:=&NUMBER;
P:=&NUMBER;
MAXINUM(N,M,O,P,X);
DBMS_OUTPUT.PUT_LINE('HIGHEST NUMBER = '||X);
END;
/
当它给出“标识符错误”时,我尝试删除此过程,但得到错误:
SQL> DROP PROCEDURE MAXINUM;
DROP PROCEDURE MAXINUM
*
ERROR at line 1:
ORA-04043: object MAXINUM does not exist
到目前为止,我已经阅读了与此错误相关的解决方案和其他解决方案 您已经使用本地过程
MAXINUM()
编写了一个匿名块。此过程可以在该块内调用,但在该块外不存在。因此,你不能单独称之为
如果要在其他地方使用该过程,则需要将其创建为一级数据库对象:
create or replace procedure MAXINUM
(N IN NUMBER, M IN NUMBER, O IN NUMBER, P IN NUMBER, X OUT NUMBER)
is
BEGIN
IF N>M AND N>O AND N>P THEN
X:=N;
ELSIF M>N AND M>O AND M>P THEN
X:=M;
ELSIF O>N AND O>M AND O>P THEN
X:=O;
ELSIF P>N AND P>M AND P>O THEN
X:=P;
END IF;
END;
/
现在,您可以在代码中调用它,如下所示:
DECLARE
N NUMBER;
M NUMBER;
O NUMBER;
P NUMBER;
X NUMBER;
BEGIN
N:=&NUMBER;
M:=&NUMBER;
O:=&NUMBER;
P:=&NUMBER;
MAXINUM(N,M,O,P,X);
DBMS_OUTPUT.PUT_LINE('HIGHEST NUMBER = '||X);
END;
/
注意事项:
顺便说一句,我假设您这样做是一种练习,因为这是对的重新实现 您已经使用本地过程
MAXINUM()
编写了一个匿名块。此过程可以在该块内调用,但在该块外不存在。因此,你不能单独称之为
如果要在其他地方使用该过程,则需要将其创建为一级数据库对象:
create or replace procedure MAXINUM
(N IN NUMBER, M IN NUMBER, O IN NUMBER, P IN NUMBER, X OUT NUMBER)
is
BEGIN
IF N>M AND N>O AND N>P THEN
X:=N;
ELSIF M>N AND M>O AND M>P THEN
X:=M;
ELSIF O>N AND O>M AND O>P THEN
X:=O;
ELSIF P>N AND P>M AND P>O THEN
X:=P;
END IF;
END;
/
现在,您可以在代码中调用它,如下所示:
DECLARE
N NUMBER;
M NUMBER;
O NUMBER;
P NUMBER;
X NUMBER;
BEGIN
N:=&NUMBER;
M:=&NUMBER;
O:=&NUMBER;
P:=&NUMBER;
MAXINUM(N,M,O,P,X);
DBMS_OUTPUT.PUT_LINE('HIGHEST NUMBER = '||X);
END;
/
注意事项:
顺便说一句,我假设您这样做是一种练习,因为这是对的重新实现 作为记录,这是一个半熟的实现作为记录,这是一个半熟的实现是的,我做这是一个练习,你的答案在理论上是有意义的,但是当我尝试应用
创建或替换过程MAXINUM(N在数字中,m在数字中,O在数字中,p在数字中,X在数字中)由于
我收到一个错误,说明PLS-00103:在预期以下情况时遇到符号“CREATE”:开始函数pragma过程子类型current cursor delete exists Previous
也许一个描述性的答案可以帮到我?我想你仍在尝试在匿名块内定义过程。您需要首先在DDL的一个单独的独立部分中创建它。我扩展了我的答案来澄清这一点。是的,我正在做一个练习,你的答案在理论上是有意义的,但是当我尝试应用创建或替换程序MAXINUM(N在数字中,m在数字中,O在数字中,P在数字中,X在数字中)时,
我得到一个错误,说明PLS-00103:遇到了符号“CREATE”当需要以下选项之一时:begin function pragma procedure subtype type current cursor delete exists previouss
也许一个描述性的答案可以帮助我?我想您仍在尝试在匿名块中定义过程。您需要首先在DDL的一个单独的独立部分中创建它。为了澄清这一点,我扩大了我的答案。