存储过程创建:
create procedure procedure_test is
begin
select * from dual;
end;调用方法1:
call procedure_test
报错:not a valid function or procedure name调用方法2:
begin
procedure_test;
end;
报错:
ORA-06550:line 2, column 1:
PLS-00905:object TEST.PROCEDURE_TEST is invalid
ORA-06550:line 2, column 1:
PL/SQL:Statement ignored
create procedure procedure_test is
begin
select * from dual;
end;调用方法1:
call procedure_test
报错:not a valid function or procedure name调用方法2:
begin
procedure_test;
end;
报错:
ORA-06550:line 2, column 1:
PLS-00905:object TEST.PROCEDURE_TEST is invalid
ORA-06550:line 2, column 1:
PL/SQL:Statement ignored
解决方案 »
- 为什么主机和虚拟机能互相ping通,虚拟机能访问主机,但是主机不能访问虚拟机呢
- insert into语句
- OEM进不去是怎么回事??
- oracle的表中为何不能两列以上数据类型都是long ?
- 批量更新语句有问题
- 我装的oracle9I,在创建资料档案库的时候总是提示我 invaid end header format
- 各位大师,哪里有PL/SQL编程的教程啊???
- 多个游标参数传值的问题
- 新年好,祝大家新的一年中大事有成。我现在在PL/SQL中怎样建表,又怎样使用程序与它连接起来
- 写一个除法器:当表记录超过100行时自动删除旧的50条记录?
- group by问题
- linux32安装oracle11gr2时一到图形界面就卡住,没有报错。
在存储过程里面select 需要有变量承接。
比如
create procedure procedure_test is
v varchar2(20);
begin
select 'abc' into v from dual;
end;
SQL> exec _test;
pl/sql,存储过程,或者函数中 须是select ..into的语法
举例来说
declare
v1 number;
v2 number;
begin
select c1,c2
into v1,v2
from table;
end;
其实你这样理解就好,在存储过程中,单纯的select是没有意义的,因为不会像常规sql那样返回数据集呈现。
在存储过程中的select值通常都作为变量进行处理,所以你需要定义变量,使用into关键字去盛装select出来的字段,且只能是一行。如有多行,则需要用游标处理。
pp varchar2(20);
begin
select * into pp from dual;
end;
存储过程在进行查询需要有承载变量。
begin
procedure_name(para);
end;
或者 execute命令exec
execute prodedure_name;
须在command window中执行 execute命令