CREATE OR REPLACE PACKAGE pkg_ls
as
   type c_type is ref cursor;
   procedure p_ls(p_id number,p_rc OUT c_type);
End;
CREATE OR REPLACE PACKAGE BODY pkg_ls
as
   procedure p_ls(p_id number,p_rc OUT c_type)
   is
   begin
      if p_id = 1 then 
          open p_rc for select * from student;
      end if;
   end ;
end;如何在SQLPLUS  和  delphi 的 ClientDataSet1.CommandText :='???’
中调用?

解决方案 »

  1.   

    cds.commandText:='select * from pkg_ls.p_ls(...)';
      

  2.   

    CREATE TABLE student
     (
      id                         NUMBER,
      name                       VARCHAR2(30),
      sex                        VARCHAR2(10),
      address                    VARCHAR2(100),
      postcode                   VARCHAR2(10),
      birthday                   DATE,
      photo                      LONG RAW
     );
    /
    在sql plus:
    declare
      w_rc       pkg_test.myrctype; --定义ref cursor型变量
     
      --定义临时变量,用于显示结果
      w_id       student.id%type;
      w_name     student.name%type;
      w_sex      student.sex%type;
      w_address  student.address%type;
      w_postcode student.postcode%type;
      w_birthday student.birthday%type;
     
    begin
    pkg_test.get(1,w_rc);
     
      --fetch结果并显示
     loop
     fetch w_rc into w_id,w_name,w_sex,w_address,w_postcode,w_birthday;
     exit when w_rc%notfound;
     dbms_output.put_line(w_name);
     end loop;
    end;
    /在delphi:
    SQL> select * from aa;        ID NAME 
    ---------- -------- 
            1 猪八戒 
            2 孙悟空 
    CREATE OR REPLACE PACKAGE pkg_test 
    AS 
    TYPE myrctype IS REF CURSOR; 
    END pkg_test; 
    / create or replace PROCEDURE get(p_rc OUT pkg_test.myrctype) 
      IS 
         sqlstr   VARCHAR2 (50); 
      BEGIN 
         sqlstr:='select * from aa'; 
         OPEN p_rc FOR sqlstr; 
    END get; 
    / 在窗体上放一个ADOStoredproc 
    设置 procedurename=get 
        prepared = true 
        active = true 
    还有 connectstring 
    代码如下,好运! procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    adostoredproc1.close; 
    adostoredproc1.open; 
    label1.caption:= ADOStoredProc1.fields[1].asstring; 
    while not adostoredproc1.eof do 
       begin 
         label2.caption:= ADOStoredProc1.fields[1].asstring; 
         adostoredproc1.Next; 
       end; 
    end; 
      

  3.   

    首先在 sqlplus 里面定義 var c refcursor
    然後 execute pkg_ls.p_ls(p_id number,:c);即可現在我有一個問題,如何使用Oracle Managerment Service ,包括安裝到使用,因為我想做數據庫備份,兄弟啊,你得幫助我啊,還有,如果哪里有資料的話,你可以介紹一下.
                            多謝
    我的email 
               [email protected]
      

  4.   

    cds.commandText:='select * from pkg_ls.p_ls(...)';
    参数错误!我试验过的不灵
      

  5.   

    beckhambobo(beckham) 
    我需要使用三次结构!不用ADOStoredProc1组件!
    必须使用delphi 的 ClientDataSet1.CommandText :='???’
      

  6.   

    三层结构的话,你把这个存储过程写在服务器上呀.我就是这么实现的...在服务器上再放一个TADOStoredProc控件,然后写过程,在客户端调用.跟调服务器的其他过程一样了..
      

  7.   

    qinkm(清风) 在中间层软件中像QUERY一样放TADOStoredProc控件吗?
    如何连接呢?
      

  8.   

    StoredProc控件无法连接程序包中的过程??请高手帮助!!!!!!
      

  9.   


    CREATE OR REPLACE PACKAGE ZHT_TESTAS  TYPE crTmp IS REF CURSOR ;
      TYPE m is TABLE of  varchar2(21)
        INDEX BY BINARY_INTEGER;
      PROCEDURE ff(mm  out m);
      procedure  gg(crtemp out crTmp) ;
    end;
    /
    CREATE OR REPLACE PACKAGE BODY "ZHT_TEST"as
       procedure  ff(mm out m) 
       AS
         kk3 varchar(13);
     crtemp crTmp;
     --a1  varchar2(20);
     a2 varchar2(20);
     a1 varchar2(20);
     percount NUMBER DEFAULT 1;   BEGIN     open crtemp for select dcusername,dcusermobile from xrmbat016 ;
     Loop
       fetch  crtemp  into a2,a1;
     
    EXIT WHEN crtemp%NOTFOUND;
    mm(percount):=a1;
    percount := percount + 1;
    end loop;
        --a1:='zhang';
    -- a2:='hait';
       END;
       procedure  gg(crtemp out crTmp)  
       as
       --crtemp crTmp;
    a1 varchar2(20);
    a2 varchar2(20);
       BEGIN     open crtemp for select dcuserName,dcusermobile  from xrmbat016 ;
     
     
       end;
    END;
    /中间层:
    ADOCn1->ConnectionString="Provider=MSDAORA.1;Password=xrmbauser;User ID=xrmbauser;Data Source=jennydb;Persist Security Info=True";
    provider用微软的,别用oracle的
    客户端:CData->Close();
    CData->CommandText="{call zht_test.gg({resultset 0,crTemp})}";
    CData->Open();