各位好:现在在oracle9i中写了一个非常简单的存储过程,就是存储过程的输入参数是手机号码,根据这个输入,从表中查询出有这个号码的所有记录,
存储过程如下:
CREATE OR REPLACE PROCEDURE TESTD(PARA1 IN VARCHAR2) AS
SELECT * FROM KFWEB_OPERATELOG WHERE PHONE_NO=PARA1;其中TESTD是存储过程过程的名字,KFWEB_OPERATELOG 是表名,PHONE_NO是一个字段名,类型是varchar2
。
这条语句运行成功,但是带有警告(我这个工具没有办法看到警告信息)刷新存储过程的文件夹也是空的,运行代码调用这个存储过程,出现异常:这个存储过程是无效的,说明存储过程没有被建立。想请问一下各位,怎么写才能让这个存储过程完全正确,谢谢!!!
存储过程如下:
CREATE OR REPLACE PROCEDURE TESTD(PARA1 IN VARCHAR2) AS
SELECT * FROM KFWEB_OPERATELOG WHERE PHONE_NO=PARA1;其中TESTD是存储过程过程的名字,KFWEB_OPERATELOG 是表名,PHONE_NO是一个字段名,类型是varchar2
。
这条语句运行成功,但是带有警告(我这个工具没有办法看到警告信息)刷新存储过程的文件夹也是空的,运行代码调用这个存储过程,出现异常:这个存储过程是无效的,说明存储过程没有被建立。想请问一下各位,怎么写才能让这个存储过程完全正确,谢谢!!!
解决方案 »
- 数据库视图问题。 在线等#######
- 急求一条sql语句,急急急
- 自定义记录报错:PLS-00103: Encountered the symbol "NAME_TYPE" when expecting one of the
- 请高手指点一下!sql小问题。
- redhat linux 9.2 安装oracle9i 的字符集问题,请指教!
- 急!listener.txt这个log文件可以直接删除吗??
- 忘记了exp时的密码,怎么imp回去?
- 高手请问,ora9I 建新用户并给用户设权限,但无法将本用户所建表权限设给新用户
- 我实现用VB读存在Oracle 里的BLOB字段的图片到pictureBox里,请高手指点!
- 关于SQL SERVER 向 ORACLE 的移植问题?
- 求助:关于Oracle的分区条件设置
- 存储过程中怎么用条件判断语句,急!!!!!
AS
begin
SELECT * FROM KFWEB_OPERATELOG WHERE PHONE_NO=PARA1;
end;这们写就不会出错,直接执行有返回值;但代码调也不会返值,要想返回值所有数据记录,要用游标,,自己去看一下吧!
假设原始表如下:
mobile_info:
mobile_id call_date addr
13999999999 20070707 beijing
13999999999 20070504 shanghai
13888888888 20070812 chengdu
13777777777 20070630 beijing
过程如下:
create or replace procedure chaxun(mobile_no in varchar2) as
v_no number(10):=1;
cursor cur_cx is select * from mobile_info where mobile_id=mobile_no;
begin
dbms_output.put_line('与'||mobile_no||'相关的数据信息如下:');
for cur_result in cur_cx loop
dbms_output.put_line('第'||v_no||'条呼叫时间为:'||cur_result.call_date||',呼叫地点为:||cur_result.addr);
v_no:=v_no+1;
end loop;
end chaxun;
执行:
exec chaxun('13999999999');
(结果略...)
OPERATE KFWEB_OPERATELOG%ROWTYPE;
CURSOR OPER IS SELECT * FROM KFWEB_OPERATELOG WHERE PHONE_NO=PARA1; //声明游标
BEGIN
OPEN OPER(); // 打开游标
LOOP
FETCH OPER INTO OPERATE ;
EXIT WHEN OPEN%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(OPERATE.表中的字段名);
END LOOP;
END;//调用存储过程
set serveroutput on
execute TESTD(参数);
函数阿,用存储过程就比较麻烦。
create or replace function TESTD(PARA1 IN VARCHAR2 ) return varchar2 is
Phone_nos varchar2;
begin
SELECT * FROM KFWEB_OPERATELOG
into Phone_nos
WHERE PHONE_NO = PARA1
return(Phone_nos);
end TESTD;这里的Phone_nos最好用集合来存储。