本人存储过程不太了解。现在我想实现写一个函数 这个函数能够被java程序调用 也可以被 存储过程调用
返回 类似键值的结果集 即 字段名--value值请大家帮帮忙 写个例子代码最好 谢谢。另外 我在写 pl/sql代码时 查的网上的资料 
create or replace type chipInResults IS object(
  fk_pid        number(12),           
  prizeLevel    number(12), 
  formerNumber  varchar2(10),
  megaNumber    varchar2(2)
);再编译时 为什么报
pls-0054:object net supported in this contextobject为什么不能用呢?因为公司不能上网,比较急 大家帮帮忙 谢谢。

解决方案 »

  1.   


    /*
    表A:会员信息表(会员号memberid,会员级别,享受折扣memberdis)
    表B:收银信息表(会员号memberid,本次消费额spend,实付金额cost)
    建一存储过程,向B中插入一条完整的数据,已知memberid和spend,
    同时通过memberid从表A中得出memberdis,cost=memberdis*spend。
    用函数实现计算cost,用存储过程实现调用函数向表B中插入一条完整的数据。
    存储过程名proc_mem,包含两个输入参数memberid和spend,函数名function_mem
    */
    --创建表
    CREATE TABLE member_info(
    memberid            NUMBER,
    memberlevel         VARCHAR2(20),
    memberdis           NUMBER)
    ;
    CREATE TABLE cost_info(
    memberid            NUMBER,
    spend               FLOAT,
    COST                FLOAT)
    ;INSERT INTO member_info VALUES(1,'A',0.1);
    INSERT INTO member_info VALUES(2,'A',0.2); 
    INSERT INTO member_info VALUES(3,'A',0.3);
    INSERT INTO member_info VALUES(4,'A',0.4);
    --创建函数
    CREATE OR REPLACE FUNCTION function_mem(p_memeberid member_info.MEMBERID%TYPE,p_spend cost_info.SPEND%TYPE)
    RETURN FLOAT
    IS
    v_cost            cost_info.COST%TYPE;
    v_memberdis       member_info.MEMBERDIS%TYPE;
    BEGIN
         SELECT memberdis INTO v_memberdis FROM member_info WHERE memberid =  p_memeberid;
         v_cost :=  v_memberdis* p_spend;
       RETURN v_cost;     
    EXCEPTION
         WHEN OTHERS THEN
            dbms_output.put_line(SQLERRM);
    END ;
    --创建procedure
    CREATE OR REPLACE PROCEDURE proc_mem(p_memeberid member_info.MEMBERID%TYPE,p_spend cost_info.SPEND%TYPE)
    IS
    v_cost cost_info.COST%TYPE;
    BEGIN
       SELECT function_mem(p_memeberid,p_spend) INTO v_cost FROM dual;
      INSERT INTO cost_info VALUES(p_memeberid,p_spend,v_cost);
      COMMIT;
    EXCEPTION
       WHEN OTHERS THEN
           ROLLBACK;
        dbms_output.put_line(SQLERRM);END;
    ----执行procedure
    BEGIN
            proc_mem(1,1000);
    END;
      

  2.   

    CREATE OR REPLACE PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2)
      IS
      IN_DEPNO VARCHAR2(10);
      BEGIN
        IN_DEPNO:='7369';
        UPDATE EMP SET HIREDATE=TRUNC(SYSDATE)-7 WHERE DEPTNO = IN_DEPNO ;
        COMMIT;
        EXCEPTION WHEN OTHERS THEN
          DBMS_OUTPUT.put_line('PROC->ERROR CODE : '||sqlcode||'ERROR MSG: '||UPPER(sqlerrm));
          ROLLBACK;
      END UPDATE_HIREDATE ;
    END PCK_DOMAIN;
      

  3.   

    谢谢大家的回答,我现在相实现的是
    函数中执行spl然后返回类似
    字段名   值   这样的集合列表,
    谢谢。
      

  4.   

    我上面提到的object的编译错误是我在package中定义的原因吗?
      

  5.   

    package里面一般是定义游标,声明函数,声明过程;
    对象类型可单独创建,就像建立表一样
      

  6.   

    各位好,我创建一个函数返回table数据
    但是我在调用编译时报下面错误
    select * from table(函数名());
    是什么问题呢?ora-22905:cannot access rows from a non-nested table item
      

  7.   


    使用表函数的时候,它的类型必须是schema级别的,也就是必须用create type..来创建嵌套表或其他类型
      

  8.   

    这样啊,但是我在网上看见一种写法,是
    create or replace type testType as objecttype tab002 is table of testTypefunction然后就是上面的查询
    这样写法不对吗?