我乃一oracle菜鸟,向各位高手请教:
一个简单的存储过程:
CREATE OR REPLACE PROCEDURE MYDBA.MYPROC (Kname out char) as
 lid number;
 lname varchar2(8);
 lsex varchar2(2);
 cursor region_cur is
 select id,name,sex
 from mydba.testtb;
begin
  open region_cur;
  fetch region_cur into lid,lname,lsex;
while region_cur%found
loop
if lid is null then
 null;
else
 Kname:=lname;
end if;
 fetch region_cur into lid,lname,lsex;
end loop;
close region_cur;
end;
在oracle中执行正常,在delphi中放了一个storedproc,设置好后,调用open,或exeproc均返回“capability not supported”的错误信息,怎么回事。
还有个问题,oracle的存储过程可以返回数据集吗,返回参数值和返回数据集两种结果如果获取。

解决方案 »

  1.   

    会用ODAC吗!还是用Oracle提供的数据链接组建应用Oracle的存储过程比较方便而且执行起来也比较快!
      

  2.   

    oracle没用过,帮你顶!
    我都在用IB多点。
      

  3.   

    獲得返回自;
    open;
    getresult();
    char a:=parambyname(param1).asstring;
    好像不能返回數據集
      

  4.   

    用ADOquery调用如下:
    这是我的例子。
      AdoQuery1.Close;
      AdoQuery1.SQL.Clear;
      AdoQuery1.SQL.Add('{call PKG_JCCTEST1.INSERTCLASS(?,?,?)}');
      AdoQuery1.Parameters.CreateParameter('P1',ftstring,pdinput, 50,'c111');
      AdoQuery1.Parameters.CreateParameter('P2',ftstring,pdinput, 50,'cn111');
      AdoQuery1.Parameters.CreateParameter('P3',ftinteger,pdinput, 50,26);
      AdoQuery1.ExecSQL;
    利用call方法调用oracle过程时,参数必须由?来传, 即使你要传的参数为常量。
      

  5.   

    这是我的例子。
      AdoQuery1.Close;
      AdoQuery1.SQL.Clear;
      AdoQuery1.SQL.Add('{call PKG_JCCTEST1.INSERTCLASS(?,?,?)}');
      AdoQuery1.Parameters.CreateParameter('P1',ftstring,pdinput, 50,'c111');
      AdoQuery1.Parameters.CreateParameter('P2',ftstring,pdinput, 50,'cn111');
      AdoQuery1.Parameters.CreateParameter('P3',ftinteger,pdinput, 50,26);
      AdoQuery1.ExecSQL;
    利用call方法调用oracle过程时,参数必须由?来传, 即使你要传的参数为常量。
      

  6.   

    我是刚一open或execproc就出错了,更别提返回值了,5555555
    标准控件Tstoedproc难道没什么用吗?
      

  7.   

    LightJie(闪电):odac是什么东东啊!
    我用SQLConnection连上ORACLE后,在TSQLStoredproc里确看不到ORACLE里的存储过程列表.
      

  8.   

    你把存储过程
    CREATE OR REPLACE PROCEDURE MYDBA.MYPROC (Kname out char)
    中 kname的類型改為varchar2試試
      

  9.   

    我也碰到这个问题。在oracle的存储过程中(与sybase,sql server不同),不能直接返回数据集,要返回数据集,要用包的方式。
      

  10.   

    在存储过程中的参数设置的时候把IN 该为IN OUT 就能够将结果返回了
    但是在调用的时候
    一定要设置好参数类型
    不论参数类型是IN 或者IN OUT 类型的
    都要在调用的正确的给出
      

  11.   

    你试试用doa开发oracle,那个东东还是很方便的,我也正在探索之中,有时间交流一下
    QQ33524826
      

  12.   

    ADOConnection连接数据库时,prodiver选择oracle prodiver for ole DB
    或者storedproc控件不连接ADOConnection,用自己连数据库