我使用客户端squirrel在oracle 11g中创建一个简单的过程,这是代码
create or replace procedure EXAMPLE_P is
begin
1+2;
end;/
执行时我得到了这个警告
Warning: Warning: execution completed with warning
SQLState: 99999
ErrorCode: 17110
Position: 0
Query 1 of 1, Rows read: 0, Elapsed time (seconds) - Total: 0.031, SQL query: 0.031, Building output: 0
这里的问题,我不能打电话给我。
begin
EXAMPLE_P();
end;/
当我执行上面的块时,我收到了这个错误。
Error: ORA-06550: line 2, column 9:
PLS-00302: component 'EXAMPLE_P' must be declared
ORA-06550: line 2, column 2:
PL/SQL: Statement ignored
SQLState: 65000
ErrorCode: 6550
Position: 37
程序ALL_OBJECTS中存在状态为INVALID的过程。 我试图编译它(验证状态),但我不会使用下面的查询
alter procedure EXAMPLE_P COMPILE;
SomeOne知道我可以做什么来调用我的程序,(我使用PL / SQL开发人员并且永远不会遇到这个问题)
答案 0 :(得分:3)
您无法调用您的程序,因为您没有创建它。您没有创建它,因为您没有1 + 2
的分配目标。你必须声明一个变量来放入它。你也有/
在错误的位置。
比较这两者之间的差异:
SQL> create or replace procedure EXAMPLE_P is
2 begin
3 1+2;
4 end;/
5 /
Warning: Procedure created with compilation errors.
SQL> create or replace procedure EXAMPLE_P is
2 i number; -- Declare a variable
3 begin
4 i := 1 + 2; -- assign something to the variable.
5 end;
6 /
Procedure created.
然后你正确地调用它。如果您没有参数,则不应包含()
。
SQL> begin
2 example_p;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL>
我试图在PL / SQL开发人员中创建你的程序并得到以下错误;所以,我有点惊讶你从未遇到过问题。
PROCEDURE ALERT.EXAMPLE_P的编译错误
错误:PLS-00103:在期待其中一个时遇到符号“1” 以下内容:
( begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge The symbol "return" was substituted for "1" to continue. Line: 3 Text: 1 + 2;